はじめに
サーバーAからサーバーBのファイル存在チェックを行いました。
実装
サーバーAにてlsコマンドを使って以下のようなshellを実装をしましたが、
ファイルが存在しない場合にlsコマンドがエラーとなってしまうためか、後続の処理が行われませんでした。
# ↓でファイルが存在しない旨のエラー
FILENAME=`ssh サーバーB "ls ファイル名"`
# ↓が処理されない
if [ -n ${FILENAME} ] && [ ${FILENAME} = "対象ファイル名" ] ; then
# パーミッション変更などの処理
fi
なので最終的に以下のように実装しました。
FILECHECK=0
ssh サーバーB "test -e ファイル名" || FILECHECK=1
if [ ${FILECHECK} -eq 0 ] ; then
# パーミッション変更などの処理
if
FILECHECKを終了ステータスに見立てて、testコマンドのエラーをもみ消しています。
こんな実装許されるのでしょうか…。
最後に
よい方法が思いつかず、無理矢理に近い実装になってしまいました。
ファイルが存在しなかった場合に後続処理が行われない点も理解できぬままです。
サーバーB側でエラー
終了ステータス1がサーバーAに返ってくる
終了ステータスが1だからエラー終了
ということでしょうか…?
ご存知の方がいらっしゃいましたら教えていただきたいです。
参考
リモート先のファイルがあるないかを確認する
【 test 】コマンド(基礎編)――ファイルの有無などを判定する
↧