2017-06-13 6 views
0

So habe ich diese Wenn-Anweisung, was das Skripts der Exit-Code überprüft wird:Wie aktualisiere ich eine "globale" Variable innerhalb einer while-Schleife?

if [ $? -eq 0 ]; then 
    wasSuccessful=true; 
fi 

In anderen Sprachen, ich so etwas tun würde:

while wasSuccessful == false 

Und dann würde die Schleife am Laufen halten bis der Exit-Code wahr war. (Ich plane, einen Schleifenzähler auch für zu viele Fehlversuche zu implementieren, aber das ist ein anderes Problem zu lösen)

Ich denke, ich brauche eine hier-Zeichenfolge, aber ich bin mir nicht genau sicher, wie das aussehen würde. Hier ist eine grobe Skizze von meinem Code gerade jetzt, in Bash:

wasSuccessful=false 

while [ "$wasSuccessful" = "false" ] 
do 

#Bunch of code here, then the check for exit code 

if [ $? -eq 0 ]; then 
    wasSuccessful=true; 
fi 

done 

Vorschläge, wie so etwas zu tun, wären sehr willkommen :)

+0

Ihr Code scheint in Ordnung zu sein. Was ist das Problem, vor dem Sie stehen? Alle Variablen in Bash sind global, sofern sie nicht innerhalb einer Funktion als lokal deklariert sind. – codeforester

+0

Ich dachte, dass die while-Schleife in einer Subshell ausgeführt wird, also werden Änderungen, die ich an Variablen mache, nur in diesem Session-Bereich gespeichert. Ist das nicht korrekt? – iMatthewCM

+0

@iMatthewCM Die 'while-Schleife' wird nicht in der Subshell ausgeführt, es sei denn, Sie fügen sie in '' commands '' ein. – alijandro

Antwort

2

Die Frage ist, wie while loop zu verlassen, wenn der letzte Befehl erfolgreich innerhalb while loop ausführen?

Sie brauchen keine global variable zu überprüfen. Überprüfen Sie einfach den Status des vorherigen Befehls und break wenn es erfolgreich ist.

while true 
do 
    # a bunch of code here 
    [ $? -eq 0 ] && break 
done 
+0

Das Gegenteil davon denke ich. Wenn der Exit-Code etwas anderes als 0 ist, muss ich weiter loopen. – iMatthewCM

+0

Ja, der obige Code wird Ihre Schleife weiterlaufen lassen, wenn der Exit-Code nicht 0 ist. – alijandro

+0

Nun ... das ist ziemlich beeindruckend. Vielen Dank! Das ist viel eleganter als das, was ich gemacht habe. Ich gebe das eine Chance, wenn ich morgen zur Arbeit zurückkomme (einfach gehen) und wenn es funktioniert, werde ich die Antwort annehmen :) – iMatthewCM

Verwandte Themen