У меня есть сценарий, который вызывает проблему, я свел его к этому;
#/bin/bash
read -t 1 -p 'Wanna continue?'
less +F readTimeout.sh
echo 'Wont get printed'
Исходный сценарий работал, предлагая пользователю продолжить, но после ожидания в течение пяти секунд (в данном случае, одного) он продолжится сам по себе.
Затем он переходит к хвосту из файла журнала (в данном случае для демонстрационных целей).
Затем он должен выполнить остальные команды после того, как пользователь less
закрывается.
Что ж, когда less
находится в tail
режиме, вам нужно нажать ctrl+c, чтобы он не следовал за файлом (тогда вы можете прокручивать / искать то, что находится в less
пока, или Shift+f, чтобы следовать, или Q, чтобы выйти),
Проблема этого сценария в том, что когда вы ^C
убивает less
, возвращает вас к приглашению (то есть остальные команды не выполняются) и останавливает вывод всего, что вы вводите (если вы нажмете Enter, ваши команды фактически выполняются записано в консоль, правда)!
Без включения -t
read
(или если вы ответите до истечения времени ожидания) все работает нормально.
Есть идеи, почему это происходит и / или как с этим бороться? До сих пор я прибегал к тому, чтобы просто заставить пользователя ответить на приглашение (т.е. убрать флаг timeout
из read
).
PS
Это не зависит от эмулятора терминала (проверено на konsole
и xterm
).
И я попытался поместить stty sane
после строки read
на случай, если это будет исправлено.