notify-finish
任意のコマンドの前に追加できるスクリプトを作成しようとしています。完了すると、次の引数で指定されたコマンドが実行され、コマンドが完了したときにユーザーに電子メールが送信されます。これが私が持っているものです:
PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER
これはほとんどの場合機能しますが、引数にスペースが含まれている場合、引用符は削除されます。
実例:
notify-finished rsync -avz source/ user@remote:dest/
失敗例:
notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/
2番目のケースで$@
は、はに展開されrsync -avz -e ssh -c blowfish source user@remote:dest/
、一重引用符が欠落しています。二重引用符でも、。でも機能しません$*
。
他の投稿を読んだ後、コマンドを配列に入れてみましたが、まったく同じ問題が発生します。
CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}
これをすべての引数で機能させるにはどうすればよいですか?