Was ist die Bash-Entsprechung des DOS-Befehls pause?

13

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
[...]
th3pr0ph3t
quelle
Mögliches Duplikat von Was ist das Linux-Äquivalent zur DOS-Pause?
MiFreidgeim SO-aufhören, böse zu sein

Antworten:

10

etwas in der Art von

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input
Huckle
quelle
14
In Bash kann dies auf gekürzt werden read -p "prompt". Weitere Details zu Shell-Einbauten können mit dem helpBefehl abgerufen werden , z help read.
Lekensteyn
@Lekensteyn - Das ist jedoch ohne nachgestellte Zeilenumbrüche.
Matt H
@MattH Genau wie echo -nund printf. Wenn Sie die Eingabetaste drücken, wird eine neue Zeile angezeigt.
Lekensteyn
Das funktioniert nicht für Ubuntu 12.04 - Lese erfordert argumenst
ses
@ses Unter 12.04.4 bashgibt es keine Anforderung, dass read ein Argument hat. Die Verwendung sh(die häufig bashim shkompatiblen Modus aufgerufen wird ) readerfordert ein Argument. Wenn Sie Ihr Skript mit starten, #!/bin/shsehen Sie das letztere Verhalten
Huckle
2

read -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:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read
Elder Geek
quelle
1

Meine bevorzugte Verwendung ist das Festlegen eines Standardzeitlimits, damit das Skript auch unbeaufsichtigt ausgeführt werden kann:

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

wo:

  • -n1 Weist den Lesenden an, ein einzelnes Zeichen zu akzeptieren
  • -t5 weist es an, maximal 5 Sekunden auf die Eingabe zu warten

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

John Landells
quelle
0

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.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"
ptwolny
quelle
Wie sendet man das CONTSignal an das Skript?
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"

Platzieren Sie diese 3 Zeilen in einer .sh-Datei und führen Sie sie aus

Dann Enok
quelle
1
-1 Was soll das und warum? Warum wird die Ausgabe des letzten echoBefehls nicht angezeigt und was hat dies mit der Geschwindigkeit des Computers zu tun?
David Foerster