2016-08-05 4 views
1

から終了コードをキャプチャ:bashの - 私は次のように私はシェルスクリプトを持っているシェルスクリプト 内のリモートsshコマンドの終了ステータスを取得するに探していたリモート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 

私が実行した場合上記のスクリプトは無効な$ bastionIP(テストの失敗のシナリオ)を持つバックグラウンドジョブとして、終了コード0(1ではなく)で終了し、ログに表示される唯一の情報は最初のecho "Running ssh command"です。スクリプトを終了するだけです。

私が間違っていることや、リモートsshコマンドの終了ステータスを取得するためのより良い方法を指摘できますか? 助けてください。

+1

あなたは 'set -e'を使用していますか? – chepner

+0

ああええ。それはおそらく問題の原因です。 @chepnerそれを指摘してくれてありがとう。 – outtoexplore

答えて

2

スクリプトはssh接続が失敗した場合、スクリプトはすぐに終了を意味し、set -eの下で実行されているように見えます。

-1

戻りコードに別の変数を使用してみてください。

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

なぜ変数名 'x'が問題なのですか?あなたは 'ローカル 'も変更する必要があります。 – tripleee

+0

ローカルを維持することができます。 – tale852150

+0

'ret_code'もローカルとして宣言するように更新する必要があります。 – tripleee

1

同じ問題に直面しました。私は以下のようにリモートssh接続を介して一連のコマンドを実行しなければならず、スクリプトは 'return here ='をエコーする前に終了します。

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

オリジナルのポストで@chepnerの応答のおかげで、それは私がそれを解決するのに役立っ削除 set -e

を使用していた同じ問題でした。

関連する問題