Как остановить скрипт bash, пока пользователь не нажал Space?
Я хотел бы иметь вопрос в моем сценарии
Нажмите пробел, чтобы продолжить, или CTRL+, Cчтобы выйти
и затем скрипт должен остановиться и ждать, пока не будет нажата клавиша пробела.
bash
control-flow
rubo77
источник
источник
Ответы:
Вы можете использовать
read
:источник
read -n1 -rsp $'Press any key to continue or Ctrl+C to exit...\n'
else
Блок всегда работает, даже когда нажата пробел.bash
. Это работает, если вы используетеread _
вместо этого, если у вас есть другая оболочка, чемbash
.''
содержать пробел внутри?''
для пустой строки. Нет места внутри. Я думаю, это также подходит, если вы введете ENTER или TABМетод, обсуждаемый в этом SO Q & A, вероятно, является лучшим кандидатом на альтернативу
pause
поведению, которое вы привыкли в Windows при работе с файлами BAT.пример
Здесь я запускаю вышеизложенное, а затем просто нажимаю любую клавишу, в данном случае Dклавишу.
Рекомендации
источник
$
перед строкой здесь-rsp $'Press
:?echo -e "..."
строк. В таких ситуациях он намного компактнее.Теперь он печатает подсказку без завершающего символа новой строки,
CTRL+C
надежно обрабатывает , вызываетstty
только столько раз, сколько необходимо, и восстанавливает контрольный tty до того состояния, в которомstty
он находился . Посмотрите наman stty
информацию о том, как явно контролировать эхо, символы управления и все.Вы также можете сделать это:
Вы могли бы сделать это
ENTER
без[
тестов]
и ничегоstty
подобного:источник
Вы можете создать для него функцию:
Тогда вы можете использовать это везде в вашем скрипте:
источник
ленивый лайнер:
недостаток в том, что вы теряете контроль, когда пользователь нажимает Ctrl + C. В этом случае скрипт всегда завершается с кодом 130.
источник
Настройки
IFS
для пустой строки подавляют поведение чтения по умолчанию обрезки пробела.ОБНОВЛЕНИЕ 2018-05-23: мы можем упростить это, используя переменную REPLY, которая не разделяется на слова:
источник
Вот способ, который работает как
bash
иzsh
, и обеспечивает ввод / вывод в терминал:Поместите это
.{ba,z}shrc
для Великой Справедливости!источник