Що таке еквівалент bash команди паузи DOS?


13

Мені потрібна пауза на скрипті оболонки, щоб показати попередження перед продовженням. Наприклад, у DOS це виглядає так:

doit.bat:

[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]

Як я можу це зробити на басі? На даний момент команда сну, здається, виконує трюк і є досить простою, але це не зовсім ідея:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]

Відповіді:


10

щось по лінії

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input

14
У Bash це можна скоротити до read -p "prompt". Детальніше про вбудовані оболонки можна отримати за допомогою helpкоманди, наприклад help read.
Лекенштейн

@Lekensteyn - Хоча, без зворотного нового рядка.
Метт H

@MattH Так само, як echo -nі printf. Якщо натиснути Enter, ви отримаєте новий рядок.
Лекенштейн

що не працює для Убунту 12,04 - читання вимагає argumenst
SES

@ses 12.04.4, використовуючи bashне потрібно, щоб аргумент читав аргумент. Використання sh(яке часто викликає bashв shсумісному режимі) readвимагає аргументу. Якщо ви розпочнете свій сценарій, #!/bin/shви побачите останню поведінку
Геккл

2

read -p "Press any key to continue or CTRL-C to abort"працює добре до 14.04 в моїх сценаріях. Як заявив @Lekensteyn у коментарі вище, схоже, це було так з 12.04.4. На сторінці "Довідка читання" зазначено:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read

1

Моє улюблене використання цього - встановлення тайм-ауту за замовчуванням, щоб сценарій також міг працювати без нагляду:

echo "Press any key to continue..."
read -n1 -t5 any_key

де:

  • -n1 повідомляє прочитаному прийняти будь-який окремий символ
  • -t5 повідомляє йому чекати максимум 5 секунд для введення

Я працюю майже виключно з Bash під CentOS, тому я не можу поручитися за це, працюючи над іншими варіантами Linux, але оскільки це Bash, я б очікував, що він буде працювати. Я хотів би знати напевно, якщо це так! :)


0

Символи чекати, щоб зупинити сценарій - це зателефонувати kill -STOP $$зі скрипту: Після призупинення сценарій продовжить свою роботу після отримання сигналу -CONT.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"

Як один CONTсигнал передає сценарій?
Девід Фоерстер

-2
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 файл та запустіть його


1
-1 Що це робити і чому? Чому висновок останньої echoкоманди не відображатиметься і що це має відношення до швидкості роботи комп'ютера?
Девід Фоерстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.