orz.conf

技術メモ✍

ファイルの転送を行うshell(bash)

普段使わないshellを使う、の2回目です。

scpでファイル転送を行うshellを書いてみたんですが、
scp実行時のエラーをログファイルに出力する方法について
ちょっと困ったのでその方法について記載したいと思います。

まずエラー出力をリダイレクトしようと考えました。

command > logfile    コマンドの実行結果をファイルに出力する場合
command >> logfile   コマンドの実行結果をファイルに追記する場合

command 1>logfile 2>&1    1が標準出力で2が標準エラー出力
                          標準出力をlogfileに、標準エラー出力を標準出力と同じ場所に出力

上記の方法だとscpでエラーとなった場合に思うように出力してくれない。
空のファイルになってしまう。
なのでこういう風にしてみました。

scp -rp ファイル名 ユーザ名@サーバ名:ディレクトリ 
if [ $? -eq 1 ]; then
    echo "Error "サーバ名 > ログファイル
fi

$?は特殊変数と呼ばれるもので色々な使われ方をするようなのですが、今回のケースでは
他の言語でいうtry ~ catch exception eのeに当たる部分となるようです。
(非常にざっくりですが)