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:
coś w stylu
źródło
read -p "prompt"
. Więcej szczegółów na temat wbudowanych powłok można uzyskać za pomocąhelp
polecenia, nphelp read
.echo -n
iprintf
. Jeśli naciśniesz Enter, pojawi się nowa linia.bash
nie ma wymogu, aby odczyt zawierał argument. Użyciesh
(które często wywołujebash
wsh
trybie zgodnym)read
wymaga argumentu. Jeśli zaczniesz pisać skrypt#!/bin/sh
, zobaczysz drugie zachowanieread -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:źródło
Moim ulubionym zastosowaniem jest ustawienie domyślnego limitu czasu, aby skrypt mógł być uruchamiany również bez nadzoru:
gdzie:
-n1
mówi czytającemu, aby zaakceptował dowolny pojedynczy znak-t5
każe mu czekać maksymalnie 5 sekund na wejściePracuję 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! :)
źródło
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.źródło
CONT
sygnał do skryptu?umieść te 3 wiersze w pliku .sh i uruchom go
źródło
echo
polecenia nie ma się wyświetlać i co to ma wspólnego z prędkością komputera?