Ich möchte Shell verwenden, um ein Skript auf einem Remote-Server aufzurufen. Ich möchte die Ausgabe dieses Skripts (seine Protokollmeldungen) und den zurückgegebenen Exit-Code erfassen.
Wenn ich das mache:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
Ich erhalte den Exit-Code, kann aber die Remote-Logging-Meldungen nicht erfassen.
Wenn ich das mache:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
Ich kann meine Ausgabe mit meiner LOG-Funktion protokollieren, kann aber anscheinend keinen korrekten Exit-Code erhalten. Ich gehe davon aus, dass der erhaltene Code der Code aus der varianble-Zuweisung ist.
Ich möchte meine LOG-Funktion weiterhin verwenden, um alle Ausgaben beim Formatieren zu erfassen und an eine Datei, Syslog und den Bildschirm zu senden.
Wie kann ich Ergebnisse in einer Variablen erfassen UND den richtigen Beendigungscode aus dem Remote-Skript abrufen?
Antworten:
Der Grund, warum Sie nicht den richtigen Fehlercode erhalten, ist, dass
local
tatsächlich das Letzte ausgeführt wurde. Sie müssen die Variable als lokal deklarieren, bevor Sie den Befehl ausführen.Sie können das Problem hier sehen:
quelle
Das "Lokale" scheint das Problem zu sein. Das funktioniert bei mir:
quelle
Tatsächlich fängt keine der obigen Antworten den ssh-Fehlercode und die Meldung auf. Dies könnte folgendermaßen geschehen (ignoriere meine benutzerdefinierten Funktionen):
quelle