Jaki jest odpowiednik polecenia pauzy w systemie DOS?

13

Potrzebuję pauzy w skrypcie powłoki, aby wyświetlić ostrzeżenie przed kontynuowaniem. Na przykład w systemie DOS wygląda to tak:

doit.bat:

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

Jak mogę to zrobić na bash? W tej chwili wydaje się, że polecenie uśpienia rozwiązuje problem i jest dość proste, ale nie jest to dokładnie taki pomysł:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]
th3pr0ph3t
źródło
Możliwy duplikat Co to jest Linux równoważny pauzie DOS?
MiFreidgeim SO-przestań być zły

Odpowiedzi:

10

coś w stylu

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input
Biodro
źródło
14
W Bash można to skrócić read -p "prompt". Więcej szczegółów na temat wbudowanych powłok można uzyskać za pomocą helppolecenia, np help read.
Lekensteyn
@Lekensteyn - To jednak bez końca nowej linii.
Matt H
@MattH Podobnie jak echo -ni printf. Jeśli naciśniesz Enter, pojawi się nowa linia.
Lekensteyn,
że nie działa na ubuntu 12.04 - odczyt wymaga argumenst
SES
@ses W dniu 12.04.4 przy użyciu bashnie ma wymogu, aby odczyt zawierał argument. Użycie sh(które często wywołuje bashw shtrybie zgodnym) readwymaga argumentu. Jeśli zaczniesz pisać skrypt #!/bin/sh, zobaczysz drugie zachowanie
Huckle
2

read -p "Press any key to continue or CTRL-C to abort"działa dobrze pod 14.04 w moich skryptach. Jak stwierdził @Lekensteyn w powyższym komentarzu, wydaje się, że dzieje się tak od 12.04.4. Strona „pomocy w czytaniu” stanowi:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read
Starszy Geek
źródło
1

Moim ulubionym zastosowaniem jest ustawienie domyślnego limitu czasu, aby skrypt mógł być uruchamiany również bez nadzoru:

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

gdzie:

  • -n1 mówi czytającemu, aby zaakceptował dowolny pojedynczy znak
  • -t5 każe mu czekać maksymalnie 5 sekund na wejście

Pracuję prawie wyłącznie z Bash pod CentOS, więc nie mogę ręczyć za to, że działa na innych wariantach Linuksa, ale ponieważ jest to Bash, oczekiwałbym, że zadziała. Chciałbym wiedzieć na pewno, jeśli tak jest! :)

John Landells
źródło
0

Próbkami, które czekają na zatrzymanie skryptu, jest wywołanie kill -STOP $$ze skryptu: Po wstrzymaniu skrypt będzie kontynuował pracę po otrzymaniu sygnału -CONT.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"
ptwolny
źródło
Jak wysyła się CONTsygnał do skryptu?
David Foerster,
-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"

umieść te 3 wiersze w pliku .sh i uruchom go

Następnie Enok
źródło
1
-1 Co to ma zrobić i dlaczego? Dlaczego wyjście ostatniego echopolecenia nie ma się wyświetlać i co to ma wspólnego z prędkością komputera?
David Foerster,