Normalerweise wiederholt !! den zuletzt eingegebenen Befehl. Aber in einem Bash-Skript scheint das nicht zu funktionieren. Gibt es eine Möglichkeit, ein Skript zu beenden und es mit genau denselben Optionen und Argumenten zu wiederholen, die beim letzten Mal angegeben wurden?
zusätzliche Information: In einem Teil meines Skripts wird geprüft, ob ein Server läuft. Wenn nicht, wird er von Etherwake gestartet. Dies ist der Teil, in dem ich möchte, dass das Skript beendet und neu gestartet wird, bis der Server endlich läuft. Dabei ignoriere ich das Problem, dass dies leicht zu einer Endlosschleife führen kann, die die System-/Netzwerkstabilität gefährden kann.
Gibt es einen einfacheren/sichereren Weg? Es scheint keinen GOTO LINE-Befehl oder etwas Ähnliches zu geben.
Antwort1
Erstellen Sie einfach eine unendliche While-Schleife:
#!/bin/sh
während [ TRUE ]; tun
check_server_status 10.0..
etherwake ff:ff..Erledigt
Antwort2
Wie wäre es mit
while server-is-not-running; do
try-and-start-server
sleep seconds-to-wait
done
Wo
server-is-not-running
ist Ihr aktueller Test, um zu sehen, ob der Server läuft, d. h. eine Shell-Funktion oder ein externer Befehl, der einen Wert ungleich Null zurückgibt, wenn der Server läuft (alternativ,! server-is-running
wenn diese Funktion oder dieser Befehl Null zurückgibt, wenn der ServerIstläuft).try-and-start-server
ist der Befehl zum Starten des Servers, der wiederum eine Shell-Funktion oder ein externer Befehl sein kann.seconds-to-wait
ist eine sinnvolle Anzahl von Sekunden, die auf einen erfolgreichen Start gewartet werden soll
Um die Anzahl der Versuche zu begrenzen, ersetzen Sie das while
durch ein for
:
for i in {1..number-of-attempts}; do
try-and-start-server
sleep seconds-to-wait
server-is-not-running || break
done