一般的な方法の1つは次のとおりです。
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
次に、次のように使用します。
mkdir -p some/path || die "mkdir failed with status $?"
または、終了ステータスを含める場合は、次のように変更できます。
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
そしてそれを使用することは少し簡単です:
mkdir -p some/path || die "mkdir failed"
失敗すると、mkdir
おそらくすでにエラーメッセージが発行されているので、2番目のメッセージは冗長であると見なされる可能性があり、次のようにすることができます。
mkdir -p some/path || exit # with the same (failing) exit status as mkdir's
mkdir -p some/path || exit 1 # with exit status 1 always
(またはdie
上記の最初のバリアントを引数なしで使用します)
見たことがない場合に備えcommand1 || command2
て実行されcommand1
、command1
失敗した場合は実行されcommand2
ます。
だから、「ディレクトリを作るか死ぬか」のようにそれを読むことができます。
あなたの例は次のようになります:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
またはdies
、メインコードがより明確になるように、さらに右側に配置することもできます。
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
または、コマンドラインが長い場合は次の行にあります。
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
また、名前をsome/path
複数回使用する場合は、変数に保存しておくと、何度も入力する必要がなく、必要に応じて簡単に変更できます。また、変数引数をコマンドに渡すときは、--
オプション区切り文字を使用して、引数がで始まる場合にオプションとして扱われないようにしてください-
。
dir=some/path
mkdir -p -- "$dir" || die "Cannot make $dir"
cd -P -- "$dir" || die "Cannot cd to $dir"
some_command || die "Cannot run some_command"