Нет никакого способа посмотреть на содержание канала, использующего обычно доступные утилиты оболочки, и при этом нет способа читать, символ к каналу затем отложил его. Единственный способ знать, что канал имеет данные, состоит в том, чтобы считать байт, и затем необходимо получить тот байт его месту назначения.
Сделайте просто что: считайте один байт; при обнаружении конца файла то сделайте то, что Вы хотите сделать, когда вход пуст; при чтении байта затем ветвление, что Вы хотите сделать, когда вход не пуст, передайте тот байт по каналу в него и передайте остальную часть по каналу данных.
first_byte=$(dd bs=1 count=1 2>/dev/null | od -t o1 -A n | tr -dc 0-9)
if [ -z "$first_byte" ]; then
# stuff to do if the input is empty
else
{
printf "\\$first_byte"
cat
} | {
# stuff to do if the input is not empty
}
fi
ifne
утилита от moreutils Joey Hess выполняет команду, если ее вход не пуст. Это обычно не устанавливается по умолчанию, но это должно быть доступно или легко основываться на большинстве вариантов Unix. Если вход пуст, ifne
ничего не делает и возвращает состояние 0, который нельзя отличить от команды, работающей успешно. Если Вы хотите сделать что-то, если вход пуст, необходимо принять меры, чтобы команда не возвратилась 0, который может быть сделан при наличии возврата случая успеха различимое ошибочное состояние:
ifne sh -c 'do_stuff_with_input && exit 255'
case $? in
0) echo empty;;
255) echo success;;
*) echo failure;;
esac
test -t 0
не имеет никакого отношения к этому; это тестирует, является ли стандартный вход терминалом. Это ничего не говорит так или иначе относительно того, доступен ли какой-либо вход.
Я должен был сделать то же самое, нашел ключ зарегистрированным, как Dustin Kirkland заявил, но для меня, ctrlb shift-F12. Конечно, если Вы повторно отобразились, Ваш связывать-ключ к ctrla затем корректируются соответственно. Связывать-ключ не необходим, чтобы это работало.
Это - переключатель, таким образом, только необходимо переключить это однажды с shift-F12 и затем при необходимости в функциональных клавишах Byobu назад просто нажмите комбинацию снова.
Это является только персистентным для жизни сессии все же. Я должен был не забыть нажимать его снова, таким образом, это может закончиться в моем 'емкостно-резистивном' файле.
Можно переключить использование Byobu F-ключей на и прочь путем нажатия:
ctrla-!
У меня были трудности с другими решениями. шифт-F12 не все отключает. F6 по-прежнему отключает сеанс. Также у меня, кажется, есть проблемы с тем, чтобы заставить F12 работать в Putty(F1-F10 в порядке ). И ctrla-! работает только с экраном в качестве серверной части, а не с tmux.
Другой способ — полностью отключить клавиши F -в привязках клавиш byobu вашего пользователя.
Если вы используете byobu с tmux , добавьте следующее в начале~/.byobu/keybindings.tmux
:
source $BYOBU_PREFIX/share/byobu/keybindings/f-keys.tmux.disable
Если вы используете byobu с экраном , добавьте следующее в начале~/.byobu/keybindings
:
source $BYOBU_PREFIX/share/byobu/keybindings/f-keys.screen.disable
ПРИМЕЧАНИЕ. :Посмотрите внимательно. В зависимости от вашего бэкэнда вам нужно изменить другой файл.