2017-08-30 2 views
0

Mein Ziel ist es, Benutzereingaben in ein Array für die spätere Verwendung im Bash-Skript zu lesen. Es funktioniert insofern, als nimmt es die Benutzereingabe und setzt sie in ein Array, aber nur dann, wenn der Benutzer weiß, dass er STRG + D drücken muss, um den Befehl readarray zu beenden.reararray Schlüsselwort stop Wert

Gibt es einen Weg zu sagen, Array zu lesen, um das Lesen von Zeilen der Eingabe zu stoppen, sobald es ein bestimmtes Keyword wie "fertig" oder "Ende" trifft?

Ich habe versucht, Wege aufzublicken den Befehl zu beenden, aber ich bin neu einzuschlagen, also bin ich nicht sicher, ob dies möglich ist, mit einer while/for-Schleife, wie zum Beispiel:

echo Type 'done' when finished 
while true 
do 
    readarray -t serverlist 

if [ "$LINE" = "done" ] 
then 
    false 
fi 
done 
+0

wahrscheinlich 'break'? . Viel Glück. – shellter

+0

Leider ist der Code, den ich habe, höchstwahrscheinlich auf verschiedene Arten falsch. Es beendet nicht einmal Readarray auf STRG + D, ich denke, es schafft eine unendliche wahre Schleife. Ich habe versucht, Pause, und das Ergebnis ist das gleiche. Danke für die Antwort! – Mormodes

+0

Sie haben ein 'done', das die' while' Schleife schließt? (nicht in Ihrem Code oben gezeigt, bitte korrigieren). Viel Glück. – shellter

Antwort

1

readarray ist Gehen Sie, um alle seine Standard-Eingabe zu lesen, einschließlich aller Sentinel wie done oder end, bevor Sie eine Chance haben, es zu testen. Sie müssen die Eingabe zeilenweise mit read lesen und jede entsprechende Zeile an das Array anhängen.

echo 'Print "done" when finished' 
while IFS= read -r line; do 
    [[ $line = done ]] && break 
    serverlist+=("$line") 
done 
+0

Vielen Dank @chepner, das funktioniert, aber ich habe die "$ line = Ende" auf "$ line = done" geändert, andernfalls erwartet es, dass Sie "end" eingeben, um die Eingabe zu stoppen. Ich schätze die Hilfe! – Mormodes

Verwandte Themen