Schleife beenden, wenn eine Taste gedrückt wird


0

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:


0

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


Sie können das ursprüngliche Skript mit Strg + C ausführen. Es geht darum, einen beliebigen Schlüssel zu verwenden.
Kamil Maciorowski

0

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


0

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:

  • Der Shebang ruft bash, nicht shwegen read -n.
  • Die Umleitung von /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.
  • Das letzte 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
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.