Ich benötige eine Pause in einem Shell-Skript, um eine Warnung anzuzeigen, bevor ich fortfahre. Unter DOS sieht das beispielsweise so aus:
doit.bat:
[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]
Wie kann ich das auf Bash machen? Im Moment scheint ein Schlafbefehl den Trick zu machen und ist einfach genug, aber nicht genau die Idee:
doit.sh
[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]
Antworten:
etwas in der Art von
quelle
read -p "prompt"
. Weitere Details zu Shell-Einbauten können mit demhelp
Befehl abgerufen werden , zhelp read
.echo -n
undprintf
. Wenn Sie die Eingabetaste drücken, wird eine neue Zeile angezeigt.bash
gibt es keine Anforderung, dass read ein Argument hat. Die Verwendungsh
(die häufigbash
imsh
kompatiblen Modus aufgerufen wird )read
erfordert ein Argument. Wenn Sie Ihr Skript mit starten,#!/bin/sh
sehen Sie das letztere Verhaltenread -p "Press any key to continue or CTRL-C to abort"
Funktioniert gut unter 14.04 in meinen Skripten. Wie @Lekensteyn im obigen Kommentar feststellte, scheint dies seit dem 12.04.4 der Fall zu sein. Auf der Seite "Hilfe lesen" heißt es:quelle
Meine bevorzugte Verwendung ist das Festlegen eines Standardzeitlimits, damit das Skript auch unbeaufsichtigt ausgeführt werden kann:
wo:
-n1
Weist den Lesenden an, ein einzelnes Zeichen zu akzeptieren-t5
weist es an, maximal 5 Sekunden auf die Eingabe zu wartenIch arbeite fast ausschließlich mit Bash unter CentOS, daher kann ich nicht dafür bürgen, dass es mit anderen Linux-Varianten funktioniert, aber da es Bash ist, würde ich erwarten, dass es funktioniert. Ich würde gerne mit Sicherheit wissen, ob dies der Fall ist! :)
quelle
Die Simples warten, bis das Skript beendet ist, um
kill -STOP $$
vom Skript aus aufzurufen : Nach einer Pause setzt das Skript seine Arbeit fort, nachdem sie das -CONT-Signal erhalten hat.quelle
CONT
Signal an das Skript?Platzieren Sie diese 3 Zeilen in einer .sh-Datei und führen Sie sie aus
quelle
echo
Befehls nicht angezeigt und was hat dies mit der Geschwindigkeit des Computers zu tun?