Interaktives Skript; Eingabeaufforderung innerhalb einer Schleife

1809
Chris

Wie fordere ich einen Benutzer zur Eingabe eines Shell-Skripts (ksh) in einer Schleife auf, in der eine Datei gelesen wird?

Das Skript liest eine Datei ein. In jedem Schleifendurchlauf wird der Benutzer gefragt, ob er abbrechen möchte oder nicht. Die Funktion funktioniert auch außerhalb der Schleife. Innerhalb der Schleife wird die Variable mit der Zeile der Datei gefüllt. Das Skript endet nicht für die Interaktion.

Irgendwelche Ideen?

Das Skript:

###################################################### func_yesno(){ echo "cancel y/n?" read answer echo Your answer: $answer case $answer in y*|Y*) exit 0 ;; n*|N*) echo ok ;; *) echo wrong! ;; esac }  func_yesno  while read line do echo line: $line func_yesno done < /tmp/in.txt  func_yesno ###################################################### 

Die Eingabedatei in.txt:

Koeln Aachen Muenchen Hamburg Berlin 

Die Ausgabe:

# /tmp/a.sh cancel y/n? n Your answer: n ok line: Koeln cancel y/n? Your answer: Aachen wrong! line: Muenchen cancel y/n? Your answer: Hamburg wrong! line: Berlin cancel y/n? Your answer: wrong! cancel y/n? n Your answer: n ok 
1

1 Antwort auf die Frage

-1
glenn jackman

Der readBefehl der Funktion verwendet den gleichen Standardwert wie die while-Schleife read. Verwenden Sie einen anderen Dateideskriptor. Die Funktion kann auch einfacher sein:

func_yesno() { typeset answer PS3="Cancel (y/n)?" select answer in Yes No; do case $answer in Yes) exit 0 ;; No) echo "ok"; break ;; esac done }  while read -u3 line; do  echo "line: $line" func_yesno done 3< unique.txt 
Es stimmt, da ist nichts falsch. MariusMatutiae vor 9 Jahren 0
Es müssen keine zwei while-Schleifen geschachtelt werden. MariusMatutiae vor 9 Jahren 0
Bitte fügen Sie Ihre Kommentare zu meinen Kommentaren hinzu, um das Gespräch an zwei Stellen nicht zu verfolgen. glenn jackman vor 9 Jahren 0