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 watch
Befehl:
watch -n10 'df -h | head'
Mit Ctrl+ cbeenden Sie den Befehl.
Die watch
Manpage 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 exitwhile
Wartet 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 sh
wegen read -n
./dev/null
soll verhindern, dass andere Befehle als read
die Standardeingabe erschöpfen ( clear
und df
kann dies möglicherweise nicht tun, im Allgemeinen jedoch). Auf diese Weise werden alle Eingaben an read
schließlich weitergeleitet.read
ist, ü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 read
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