ローカルシェルスクリプトを使用してリモートサーバーでシェルスクリプトを実行しようとしています。
リモートシェルスクリプトでエラーが発生した場合は、ローカルシェルスクリプトを停止する必要があります。
以下のように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'
または終了コードを保存する他の方法