Beenden Sie die Schleife, wenn eine Taste gedrückt wird
529
BOUABANE Raed
Ich möchte das Skript beenden, wenn eine Taste gedrückt wird.
#!/bin/sh while true; do df -h | head sleep 10 clear done
Irgendein Vorschlag?
3 Antworten auf die Frage
0
kai-dj
Ersetzen sleep 10;durchread -t 10 -n 1 exitwhile; if [ -n "$exitwhile" ]; then break; fi
read -t 10 -n 1 exitwhilewartet 10 Sekunden auf Eingabe ohne Bestätigung mit enter und setzt die Eingabe in den Variablen-Exit. Wenn diese Variable nicht leer ist, wird die while-Schleife unterbrochen.
… Muss jedoch modifiziert werden, da es nur bei Zeichentasten bricht
0
oliv
Sie sollten den watchBefehl besser verwenden :
watch -n10 'df -h | head'
Verwenden Sie Ctrl+ c, um den Befehl zu stoppen.
Die watchManpage sagt:
watch - führt ein Programm regelmäßig aus und zeigt die Ausgabe im Vollbildmodus
Sie können das ursprüngliche Skript Strg + C drücken. Der Punkt ist die * beliebige * Taste.
Kamil Maciorowski vor 5 Jahren
0
Die Umleitung von /dev/nullsoll verhindern, dass andere Befehle ausgeführt werden, als dass readder Standardeintrag erschöpft wird ( clearund dies dfmöglicherweise nicht, aber im Allgemeinen können Befehle befohlen werden). Auf diese Weise gehen alle Eingaben readschließlich an.
Das letzte readist, übermäßige Zeichen von stdin zu verwerfen. Einige Schlüssel erzeugen mehr als ein Zeichen (Forschung "Escape-Sequenzen"); Sie können auch mehrere Tasten drücken, während df(oder ein anderer Befehl, den Sie verwenden möchten) ausgeführt wird. Ohne das letzte readZeichen würden diese zusätzlichen Zeichen Ihre Befehlszeile verunreinigen.
Alternativer Ansatz mit watch:
#!/bin/bash watch -n 10 df -h & # put to the background read -n 1 kill $! # kill the the job most recently placed into the background read -t 0.1 -n 1000000