#はじめに
お疲れさまです。
if文の評価式でリモートサーバの特定のファイル有無を評価する方法に地味に苦戦したため、誰かの助けになるかはさておき、残すことにしました。
OSはRHEL7を想定しています。
#本題
sshコマンドは以下のように実行すると、リモートサーバ上でコマンドを実行できます。
[user@host001 /tmp]$ ssh [ユーザ名]@[ホスト名] "ls -l"
そしてこの場合に出力され得る戻り値は以下の通りです。
戻り値 | 状況 |
---|---|
0 | sshコマンドとlsコマンドが正常終了した |
1 or 2 | ls -lコマンドがエラーとなった |
255 | sshコマンドがエラーとなった |
上記の表だけでは説明不足かもしれませんが、sshコマンドが異常終了した場合は、戻り値として「255」が返ってきます。
一方でリモートで実行したコマンドが異常終了した場合は、そのコマンドの戻り値が返ってきます。
今回はこの仕様を使用して、リモートサーバの特定のファイル有無を評価します。
結論は以下の通りです。
if [ `ssh [ユーザ名]@[ホスト名] "test -e [リモートファイル名]"` -eq 0 ]; then
処理
fi
詳細は控えますが、「test -e [ファイル名]」でファイルの存在有無を評価可能であり、ファイルが存在する場合は戻り値は「1」が返ってきます。sshでそれをリモートサーバ上で実行するだけです。
ただしこの方法だとsshコマンド自体が異常終了となった場合もファイルが存在しないのと同じ扱いになります。
sshのエラーも検知しつつこれくらいシンプルな方法があれば知りたいものです。