Ich möchte das Skript verlassen, wenn eine Taste gedrückt wird.
#!/bin/sh
while true; do
df -h | head
sleep 10
clear
done
Irgendein Vorschlag?
Ich möchte das Skript verlassen, wenn eine Taste gedrückt wird.
#!/bin/sh
while true; do
df -h | head
sleep 10
clear
done
Irgendein Vorschlag?
Antworten:
Verwenden Sie besser den watchBefehl:
watch -n10 'df -h | head'
Mit Ctrl+ cbeenden Sie den Befehl.
Die watchManpage sagt:
watch - führt ein Programm in regelmäßigen Abständen aus und zeigt die Ausgabe im Vollbildmodus an
Ersetzen sleep 10;durchread -t 10 -n 1 exitwhile; if [ -n "$exitwhile" ]; then break; fi
read -t 10 -n 1 exitwhileWartet 10 Sekunden auf die Eingabe ohne Bestätigung mit enter und setzt die Eingabe währenddessen in die Variable exit. Wenn diese Variable nicht leer ist, wird die while-Schleife unterbrochen.
… Muss jedoch geändert werden, da es nur bei Zeichentasten zu Unterbrechungen kommt
Dies wird auf fast jeder Taste beendet:
#!/bin/bash
while true; do
{ clear; df -h | head; } </dev/null
read -n 1 -t 10 && break
done; read -t 0.1 -n 1000000
Anmerkungen:
bash, nicht shwegen read -n./dev/nullsoll verhindern, dass andere Befehle als readdie Standardeingabe erschöpfen ( clearund dfkann dies möglicherweise nicht tun, im Allgemeinen jedoch). Auf diese Weise werden alle Eingaben an readschließlich weitergeleitet.readist, überflüssige Zeichen aus dem Standard zu entfernen. Einige Tasten erzeugen mehr als ein Zeichen (Forschung "Escape-Sequenzen"); Es ist auch möglich, mehrere Tasten zu drücken, während df(oder ein anderer Befehl, den Sie verwenden möchten) ausgeführt wird. Ohne das Finale würden readdiese 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