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
[...]

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

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

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! :)


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"

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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.