Der Befehl `sleep` in Linux bewirkt, dass Ihr Computer für eine bestimmte Zeit nichts tut. Auch wenn es nicht intuitiv erscheint, ist es manchmal erforderlich, eine Pause einzulegen. In diesem Artikel erfahren Sie, wie Sie diesen Befehl in der Bash-Shell effektiv einsetzen können.
Die Verwendung von `sleep` ist unkompliziert. Geben Sie in der Befehlszeile `sleep`, gefolgt von einem Leerzeichen und einer Zahl ein, und drücken Sie dann die Eingabetaste.
sleep 5
Der Cursor verschwindet für fünf Sekunden und erscheint dann wieder. Was ist passiert? Wenn Sie `sleep` in der Befehlszeile nutzen, veranlasst Bash, dass die Verarbeitung für die angegebene Zeitspanne unterbrochen wird. In diesem Beispiel waren es fünf Sekunden.
Sie können die Dauer der Pause in Tagen, Stunden, Minuten und Sekunden angeben. Verwenden Sie dazu die Suffixe `d` für Tage, `h` für Stunden, `m` für Minuten oder `s` für Sekunden. Wenn Sie beispielsweise eine Pause von einem Tag, vier Stunden, sieben Minuten und fünf Sekunden einlegen möchten, sieht der Befehl so aus:
sleep 1d 4h 7m 5s
Das Suffix `s` (für Sekunden) ist optional. Wenn Sie kein Suffix angeben, interpretiert `sleep` die eingegebene Zahl als Sekunden. Angenommen, Sie möchten eine Pause von fünf Minuten und zwanzig Sekunden einlegen. Der korrekte Befehl lautet:
sleep 5m 20
Wenn Sie das Suffix `m` für Minuten vergessen, wird die Pause zuerst für fünf Sekunden und dann noch einmal für zwanzig Sekunden eingelegt, also insgesamt 25 Sekunden.
Bei vielen Befehlen ist die Reihenfolge der Parameter wichtig, aber `sleep` ist hier sehr flexibel. Sie können die Parameter in beliebiger Reihenfolge angeben, und `sleep` wird diese richtig interpretieren. Sie können auch Gleitkommazahlen verwenden. Zum Beispiel ist `0.5h` eine gültige Angabe für eine halbe Stunde Pause.
Alle der folgenden (zunehmend ungewöhnlichen) Befehle bewirken eine Pause von 10 Sekunden:
sleep 10
sleep 5 5s
Sleep 1 1 1s 1 1 1s 1 2
sleep 0.16667m
Verwendung von `sleep` vor einem Befehl
Der Befehl `sleep` kann verwendet werden, um eine Pause einzulegen, bevor ein anderer Befehl ausgeführt wird. Der folgende Befehl pausiert für 15 Sekunden und gibt dann einen Signalton aus:
sleep 15 && echo -en '\a'
Verwendung von `sleep` zwischen zwei Befehlen
Sie können `sleep` verwenden, um eine Pause zwischen der Ausführung von zwei Befehlen einzulegen. Der folgende Befehl listet die Dateien in Ihrem Dokumenten-Verzeichnis auf, pausiert dann für fünf Sekunden und wechselt anschließend in Ihr Home-Verzeichnis:
ls -R ~/Documents && sleep 5 && cd ~
Verwendung von `sleep` zum Anhalten der Skriptausführung
Sie können den `sleep`-Befehl in Shell-Skripten verwenden, um die Ausführung des Skripts für eine bestimmte Zeitspanne zu unterbrechen. Normalerweise geschieht dies, um einem Prozess ausreichend Zeit zur Fertigstellung zu geben, bevor das Skript fortfährt. Sie können es auch verwenden, um die Rate der Anfragen eines Skripts an eine andere Ressource zu begrenzen.
Um dies zu demonstrieren, ist hier ein Skript, das mit `curl` einen Google-Webdienst abfragt. Wenn Sie dem Webservice die ISBN-Nummer eines Buches übergeben, gibt er die JSON-Daten zu diesem Buch zurück. Diese Daten können wir mit dem Dienstprogramm `jq` analysieren, um den Titel des Buches abzurufen. Damit das Skript den Webdienst nicht überlastet, pausiert es für eine Sekunde zwischen den Webanfragen.
Erstellen Sie eine Datei mit dem folgenden Inhalt und speichern Sie diese als `check_book.sh`:
#!/bin/bash for book in `cat $1` do echo $book":" curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title' echo "" sleep 1 done echo "Fertig."
Geben Sie den folgenden Befehl ein, um die Ausführungsrechte zu setzen und das Skript ausführbar zu machen:
chmod +x check_book.sh
Das Skript benötigt die Dienstprogramme `curl` und `jq`. Installieren Sie diese Pakete mit `apt-get`, wenn Sie Ubuntu oder eine andere Debian-basierte Distribution verwenden. Für andere Linux-Distributionen verwenden Sie das Paketverwaltungstool Ihrer Linux-Distribution.
sudo apt-get install curl
sudo apt-get install jq
Erstellen Sie eine Textdatei mit den folgenden ISBN-Nummern und speichern Sie sie als `books.txt`:
9781565921276 9781874416685 9781565921672 9780521431088 9781491941591
Führen Sie das Skript `check_book.sh` aus und übergeben Sie die Datei `books.txt` als Parameter:
./check_book.sh books.txt
Die Anfragen werden im Sekundentakt an den Google-Webservice gesendet. Der Buchtitel erscheint kurz nach der Abfrage jeder ISBN-Nummer.
Das ist alles, was es zum `sleep`-Befehl gibt. Die detaillierte Funktionsweise des Skripts `check_book.sh` würde den Rahmen dieses Artikels sprengen. Das Skript wurde lediglich ausgewählt, um eine sinnvolle Anwendung des `sleep`-Befehls zu demonstrieren. Wenn Sie mehr über die beiden Hauptkomponenten des Skripts erfahren möchten, lesen Sie die Projektseite von `curl` und das Online-Handbuch von `jq`.