Мне нужна пауза в сценарии оболочки, чтобы вывести предупреждение перед продолжением. Например, в DOS это выглядит так:
doit.bat:
[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]
Как я могу сделать это на bash? На данный момент команда сна, кажется, делает свое дело и достаточно проста, но не совсем идея:
doit.sh
[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]
read -p "Press any key to continue or CTRL-C to abort"
отлично работает под 14.04 в моих скриптах. Как сказал @Lekensteyn в комментарии выше, похоже, что это имело место с 12.04.4. Страница 'help read' гласит:
-p prompt output the string PROMPT without a trailing newline before
attempting to read
echo "press enter to continue"
read unusedVariable
echo "running these 3 lines in .sh file, this echo will never be seen, unless you have a really slow computer"
поместите эти 3 строки в файл .sh и запустите его
Мое любимое использование этого - установить тайм-аут по умолчанию, чтобы скрипт мог запускаться без присмотра:
echo "Press any key to continue..."
read -n1 -t5 any_key
где:
-n1
сообщает о прочтении принять любой отдельный символ -t5
говорит ему ждать максимум 5 секунд для ввода Я работаю почти исключительно с Bash под CentOS, поэтому я не могу поручиться за это работает на других вариантах Linux, но так как это Bash, я ожидаю, что это сработает. Я хотел бы знать наверняка, если это так! :)
simples ожидают для остановки, сценарий должен звонить kill -STOP $$
из сценария: После того, как приостановлено сценарий продолжится, его работа после получения - ПРОДОЛЖЕНИЕ СЛЕДУЕТ сигнализируют.
#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"
что-то вроде
echo -n "prompt" #'-n' means do not add \n to end of string
read # No arg means dump next line of input