2016-08-05 23 views
1

Ich suche den Exit-Status eines Remote-Befehl ssh in einem Shell-Skript bei Erfassung habe ich ein Shell-Skript wie folgt:bash - Capture-Exit-Code von Remote-Befehl ssh

function rSSH { 
    local x 
    echo "Running ssh command" 
    x=$(ssh -o StrictHostKeyChecking=no -i $keyPair -o ProxyCommand="ssh -W %h:%p -i $keyPair [email protected]$bastionIP 22" [email protected]$IP "$cmd") 

    x=$? 
    echo "SSH status is : $x" 
    if [ $x -eq 0 ];then 
     echo "Success" 

    else 
     echo "Failure" 
     exit 1 
    fi 
} 

rSSH 
exit 0 

Als ich die execute über Skript als Hintergrund-Job mit einem ungültigen $ bastionIP (Test-Fehler-Szenario), ergibt es mit einem Exit-Code von 0 (anstelle von 1) und die einzige Information, die ich in den Protokollen sehe, ist das erste echo "Running ssh-Befehl" und es Verlässt das Skript einfach.

Kann jemand darauf hinweisen, was ich falsch mache oder eine bessere Möglichkeit, den Exit-Status des Remote-SSH-Befehls zu erfassen. Schätzen Sie jede Hilfe.

+1

Verwenden Sie 'set -e'? – chepner

+0

ahh ja. Das verursacht wahrscheinlich das Problem. @chepner Danke, dass du das unterstrichen hast. Total verpasst, dass – outtoexplore

Antwort

2

Das Skript wird unter set -e ausgeführt werden, was bedeutet, wenn die ssh Verbindung fehlschlägt, wird das Skript sofort beendet.

-1

Verwenden Sie eine andere Variable für den Rückkehrcode.

function rSSH { 
    local x 
    echo "Running ssh command" 
    x=$(ssh -o StrictHostKeyChecking=no -i $keyPair -o ProxyCommand="ssh -W %h:%p -i $keyPair [email protected]$bastionIP 22" [email protected]$IP "$cmd") 

    local ret_code 
    ret_code=$? 
    echo "SSH status is : $ret_code" 
    if [ $ret_code -eq 0 ];then 
     echo "Success" 

    else 
     echo "Failure" 
     exit 1 
    fi 
} 

rSSH 
exit 0 
+0

Warum ist der Variablenname 'x' problematisch? Sie sollten dann auch das 'local' ändern. – tripleee

+0

Sie können das lokale behalten. – tale852150

+0

Sie müssen es aktualisieren, um auch 'ret_code' als lokal zu deklarieren. – tripleee

1

Konfrontiert das gleiche Problem. Ich musste eine Reihe von Befehlen über eine Remote-SSH-Verbindung ausführen, wie unten gezeigt, und das Skript wird beendet, bevor das 'Echo' von 'Rückkehr hierher =' zurückgegeben wird.

ssh -v -T -i ${KEY} -p${PORT} -tt ${USER}@${IP} /bin/bash -c "' 
echo "Inside Script" 
exit 12 
'" 
echo "return here=$?" 

Dank der Reaktion von @chepner in der ursprünglichen Nachricht, war es das gleiche Problem, das ich set -e

wurde unter Verwendung Entfernt es zu lösen half.