Ich benutze OpenSSH und habe das folgende Bash-Skript mit dem Namen foo unter Debian 8 (Jessie) Linux:
#!/bin/bash
ssh root@10.0.0.60 "$1"
if [[ $? ]]; then
echo "Pass"
else
echo "Fail"
fi
Ich führe dieses Skript wie folgt aus:
root@my_host:~/bin# foo 'echo "Hello world!"'
Hello world!
Pass
root@my_host:~/bin# foo true
Pass
root@my_host:~/bin# foo false
Pass
root@my_host:~/bin# foo not_a_command
bash: not_a_command: command not found
Pass
Ich kann den Exit-Code des remote ausgeführten Befehls eindeutig nicht erfolgreich erfassen. Wie kann ich das machen?
ssh
Befehl selbst.exit
, die für Ihre Situation funktionieren könnte.if [[ $? -eq 0 ]]; then
.Antworten:
Hiermit wird geprüft, ob der Wert von "$?" ist eine leere Zeichenfolge oder nicht. Natürlich nicht, daher wird der Test immer als wahr bewertet.
Sie möchten eine der folgenden Aktionen ausführen:
Oder wenn Sie ausdrücklich verweisen möchten
$?
:quelle
Aus dem feinen Handbuch für
ssh(1)
dürfen wir stolpernwas Ihrer Behauptung zu widersprechen scheint; bei einigen tests kann man feststellen
(es sei denn, man hat eine Shell-Funktion, die den eigentlichen
ssh
Befehl maskiert ; versuchen Sie, den vollständig qualifizierten Pfad zu verwendenssh
, um dies zu vermeiden.) Dies deutet darauf hin, dass das[[ $? ]]
Konstrukt problematisch ist. Dies ist einfach zu testen und zu beweisenMan könnte also stattdessen einen Gleichheitstest nach dem Muster von verwenden
quelle