Skript beenden und mit denselben Optionen und Argumenten neu starten

Skript beenden und mit denselben Optionen und Argumenten neu starten

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-runningist 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-runningwenn diese Funktion oder dieser Befehl Null zurückgibt, wenn der ServerIstläuft).
  • try-and-start-serverist der Befehl zum Starten des Servers, der wiederum eine Shell-Funktion oder ein externer Befehl sein kann.
  • seconds-to-waitist eine sinnvolle Anzahl von Sekunden, die auf einen erfolgreichen Start gewartet werden soll

Um die Anzahl der Versuche zu begrenzen, ersetzen Sie das whiledurch ein for:

for i in {1..number-of-attempts}; do
    try-and-start-server
    sleep seconds-to-wait
    server-is-not-running || break
done

verwandte Informationen