Prüfen Sie, ob die Ausführung eines Skripts abgeschlossen wurde, anstatt es zu beenden

Prüfen Sie, ob die Ausführung eines Skripts abgeschlossen wurde, anstatt es zu beenden

Ich arbeite mit einem Skript, das ich nicht ändern kann und das keine Exit-Codes verwendet. (Alle Exits sind einfach „exit“)

Gibt es eine Möglichkeit zu prüfen, ob das Skript „das Ende erreicht hat“, anstatt an einer früheren Stelle im Skript beendet zu werden, ohne das Skript zu ändern (oder die Idioten anzuschreien, die es geschrieben haben)?

Das Einzige, was mir einfällt, ist, aktive Prozesse irgendwie zu verfolgen, bis sie enden. Sie würden aber auch enden, wenn sie aufgrund eines Fehlers beendet werden.

Antwort1

Ich arbeite mit einem Skript, das ich nicht ändern kann und das keine Exit-Codes verwendet.

Wenn ein Fehler auftritt, sollte die letzte Zeile dieser Datei „exit“ enthalten, andernfalls wurde die Ausführung des Skripts erfolgreich abgeschlossen.

Dieser Code bewirkt, dass der Befehl mit dem Code 1 beendet wird, wenn er fehlgeschlagen ist, und mit dem Code 0, wenn er erfolgreich war:

bash -x scriptname 2>&1 | tail -n1 | grep -vq exit

tail -n1zeigt nur die letzte Zeile an und grep -vq exitprüft, ob diese Zeile das Wort enthielt exit.

Beispiele, wie Sie die Anzeige nützlicher Meldungen gestalten können:

bash -x scriptname 2>&1 | tail -n1 | grep -vq exit && echo Success

Oder:

bash -x scriptname 2>&1 | tail -n1 | grep -vq exit || echo Fail

verwandte Informationen