Вы можете использовать блокирующее чтение с тайм-аутом, чтобы определить, когда вывод остановлен. Например, Bash read
поддерживает параметр тайм-аута. Следующий скрипт запишет одну строку, если вывод из STDIN остановится более чем на 2 секунды:
#!/bin/sh
while read -r firstline; do
while read -r -t 2 line; do
continue
done
echo "---- No data in 2 seconds ----"
done
Эхо можно перенаправить -в другой журнал, а сценарий можно изменить, чтобы при необходимости отображать данные, считываемые из стандарта.
Большинство учебников, которые вы можете найти, посвящены bash. Ksh очень хорош для написания сценариев, но плох для интерактивного использования. Используйте zsh (лучший) или bash (второй по популярности) в качестве командной строки, если можете.
Сегодня существует две основные реализации ksh: реальная оболочка Korn shell ksh93 и клон mksh (полученный из давно не поддерживаемого pdksh). Они имеют различные средства связывания ключей.
В ksh93 клавиши Вверх и Вниз по умолчанию не перемещаются в истории командной строки. По умолчанию используются клавиши Ctrl+P и Ctrl+N. Вы можете изменить привязки клавиш с помощью ловушки KEYBD
; она довольно неуклюжа, поскольку вы можете только переводить клавиши в другие клавиши, а все привязки должны быть определены в одном месте. Вот как заставить Вверх и Вниз перемещаться по истории (этот код вводится в ~/. kshrc
):
set -o emacs
function KEYBD_trap {
case ${.sh.edchar} in
$'\e'[[O]A) .sh.edchar=$'\e>';;
$'\e'[[O]B) .sh.edchar=$'\e<';;
esac
}
trap KEYBD_trap KEYBD
\e[A
и \eOA
, где \e
обозначает ASCII escape character, - это две управляющие последовательности, которые терминал может отправить, когда пользователь нажимает клавишу Вверх (это зависит от терминала и его текущего режима). Аналогично \e[B
и \eOB
- для Вниз. $'\e
- это обозначение, которое вы можете использовать в ksh для символа эвакуации; шаблон [[O]
соответствует либо [
, либо O
.
В mksh вы определяете привязки клавиш с помощью встроенного модуля bind
. Вверх и Вниз по умолчанию перемещают по истории (в дополнение к kbd>Ctrl+P и Ctrl+N). Следующий код (который нужно поместить в ~/.mkshrc
) отключает клавиши со стрелками:
bind '^[OA'=
bind '^[[A'=
bind '^[OB'=
bind '^[[B'=
^[
- это обозначение, которое вы можете использовать в привязках клавиш mskh для символа escape.
Вся эта информация находится в man-странице оболочки, не обязательно в понятной форме, если вы не знакомы с оболочками Unix.