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

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

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

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


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"

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.