ローカル シェル スクリプトを使用して、リモート サーバーでシェル スクリプトを実行しようとしています。
リモート シェル スクリプトでエラーが発生した場合、ローカル シェル スクリプトを停止する必要があります。
私は次のように ssh 経由でリモート シェル スクリプトを実行しています。
##parent shell script##
#!/bin/bash -ex
scp remote_shell.sh ${host}:${path}
ssh ${host} '${path}/remote_shell.sh ; rm ${path}/remote_shell.sh'
..do something
##remote_shell.sh##
#!/bin/bash -ex
..do something
..error occurred
exit 1
問題は、remote_shell.sh が 1 で終了しても、親シェルが停止しないことです。
このスクリプトをローカル(ssh なし)で試したところ、親が予想どおりに停止しました。
この問題は 3 行目の ';' 演算子に関連していますか?
(失敗に関係なく、remote_shell.sh ファイルを削除する必要があります。)
もちろん、If Else コードを使用してこれを実現できますが、シンプルにしたいと思っています。
答え1
使用
ssh ${host} '${path}/remote_shell.sh'
または
ssh ${host} '${path}/remote_shell.sh ; R=$?; rm ${path}/remote_shell.sh; exit $R'
または終了コードを保存する他の方法