Im Ändern eines vorhandenen Bash-Skript und einige Probleme bekommen die While-Schleife sich richtig verhalten. Dies ist der ursprüngliche CodeCompound-Bedingung in einer Bash-While-Schleife
while ! /usr/bin/executable1
do
# executable1 returned an error. So sleep for some time try again
sleep 2
done
ich diese
while ! /usr/bin/executable1 && ! $(myfunc)
do
# executable1 and myfunc both were unsuccessful. So sleep for some time
sleep 2
done
der folgenden ändern möchten executable1 bei Erfolg 0 und 1 bei einem Fehler zurückgibt. Ich verstehe, dass „true“ in bash auf 0 wertet so ist, warum das ursprüngliche Skript bis ausführbare Looping halten würde Erfolg zurück
Dementsprechend myfunc wie diese
myfunc()
{
# Check if file exists. If exits, return 0, If not, return 1
if [ -e someFile ]; then
return 0
fi
return 1
}
Ich stelle fest, codiert, dass das meine neue while-Schleife tut scheint nicht ausführbar zu sein1. Es ruft immer myfunc() auf und verlässt dann sofort die Schleife. Was mache ich falsch?
ich verschiedene Möglichkeiten, die Codierung der while-Schleife (mit (()), [], [[]] usw.) versucht, aber nichts, um es
Es ist nicht klar, warum Sie denken, 'executable1' ist nicht ausgeführt; Es muss * ausgeführt werden, um (aufgrund von && ') zu entscheiden, ob" myfunc "ausgeführt werden soll oder nicht. – chepner
Ausführbare Datei 1, wenn sie selbst ausgeführt wird, dauert etwa 8-10 Sekunden. (Es läuft tatsächlich "ntpdate") Also bin ich mir ziemlich sicher, dass es nicht aufgerufen wird, weil die while-Schleife fast sofort zurückkehrt. –
Ich denke, dass ich das Problem in meinem Code herausgefunden habe. In bash stellt sich heraus, dass boolescher Wert wahr 0 ergibt und boolescher falscher Wert 1 ist. Also while ((0)) ist eigentlich eine unendliche while-Schleife. Was ich tun möchte, ist die While-Schleife eingeben, wenn die Datei nicht gefunden wird. Also sollte ich 1 (false) zurückgeben, wenn die Datei nicht gefunden wurde, und 0 (true), wenn die Datei gefunden wurde. Sobald ich diese Änderung vorgenommen habe, hat alles funktioniert –