2011-01-08 14 views
3

Ich habe das folgende Bash-Skript. Wie kann ich es nach dem Drücken einer Taste oder nach einer Reihe von Loops pausieren lassen, aber wenn ich keine Taste drücke, sollte es eine Schleife sein?Pause Bash Schleife

for i in `cat files` 
do 
    echo $i 
done 

Antwort

4

Ich denke, ich habe zunächst Ihre Frage falsch gelesen. Sie können den aktiven Prozess jederzeit unterbrechen, indem Sie Ctrl+Z drücken und ihn mit dem integrierten fg fortsetzen.

Um das Skript Pause nach einer Anzahl von Iterationen zu machen durchgeführt worden sind, können Sie einen Zähler Variable verwenden und die modulo Operator %:

i=1 
for f in `cat files`; do 
    echo $f 
    if ((i % 10 == 0)); then # pause every 10 iterations 
     read 
    fi 
    let "i++" 
done 

Meine ursprüngliche Antwort war:

Sie können das read Built-in verwenden, um die Shell warten zu lassen, bis der Benutzer den RETURN Schlüssel (oder EOF Schlüssel, Ctrl+D) drückt:

for i in `cat files` 
do 
    echo $i 
    read 
done 

können Sie verwenden, um die -t Möglichkeit read, um es aus Zeit haben und weiterhin Ausführung:

for i in `cat files` 
do 
    echo $i 
    read -t 1 
done 

Die oben wird die Ausführung nach 1 Sekunde wieder aufnehmen, wenn der Benutzer nicht die RETURN Taste nicht drücken .

+0

Dies lässt das Skript warten, bis AnyKey jedes-Schleife-Tick – newmusicblog

+0

@newmusicblog startet, nein, wird es nicht. Dann hast du diese Anforderung einfach zu deiner Frage hinzugefügt :) –

+0

Wenn ich dieses Skript verwende, gibt es nur eine Variable und wartet dann ||| Ich brauche es, um indinetnetly Schleife, bis ich Pause drücken – newmusicblog