shell scriptでエラーをみやすくする
GNU/Linux上で書かれテストされたスクリプトがmacOS上で正しく実行されない、あるいはその逆で、コアとなるユーティリティのGNU版とBSD版の違いのために正しく実行されないというのはよくある問題です。エラーメッセージはスクリプトの出力で溺れてしまうことがあり、何かが正しく実行されていないことは自明ではない場合がある。
基本 exit code
error_exit() { # stderrに出力 echo "$1" 1>&2 exit 1 } if cd $your_directory; then rm * else error_exit "cannnot move to directory " fi
任意のコマンドの失敗でexit
POINT : -e
オプションを指定して set builtin コマンドを使用する
# 特定のコマンドの実行に失敗した場合exitする set -e
特定のコマンドが失敗した場合のみ終了する
特定のコマンドが失敗したときだけ気にしたいときもある。このような場合は、明示的に呼び出されてステータスコードをチェックし、必要に応じて終了する必要がある。
exit_on_error() { execution_code=$1 latest_command=${@:2} if [ $execution_code -ne 0 ]; then >&2 echo "\"${latest_command}\" コマンドが失敗したため終了しました。終了コード: ${execution_code}." exit $ecode fi } # enable !! command completion set -o history -o histexpand ls --unknown-option exit_on_error $? !!
output .
ls: illegal option -- - usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...] exit_on_error $? ls --unknown-option "ls --unknown-option" コマンドが失敗したため終了しました。終了コード: 1.