以下の関数テストのより短い実装を思い付くことができますか(同じエラー メッセージを出力し、同じ終了ステータスを持ちます)。
function test
{
some-command
exit_status=$?
if [ $exit_status -ne 0 ]; then
echo "some-command failed with exit status $exit_status" >&2
fi
return $exit_status
}
以下の関数テストのより短い実装を思い付くことができますか(同じエラー メッセージを出力し、同じ終了ステータスを持ちます)。
function test
{
some-command
exit_status=$?
if [ $exit_status -ne 0 ]; then
echo "some-command failed with exit status $exit_status" >&2
fi
return $exit_status
}
some-command || echo "some-command failed with exit status $?" >&2
終了ステータスをキャプチャして返したい場合は、
function test {
some-command || r=$? && echo "some-command failed with exit status $r" >&2 && return $r
}
コマンドが成功するとすぐに戻ります。その後、返されない場合は、エラーが発生したことがわかります。これにより、if
ステートメントの必要がなくなります。
function newTest {
some-command && return 0
exit_status=$?
echo "some-command failed with exit status $exit_status" >&2
return $exit_status
}
私の解決策:
#!/bin/bash
test () {
"$@" || eval "echo '$1 failed with exit status $?' >&2; exit $?"
}
これが役立つことを願っています=)
エラーで何が正確に記録されているかについて非常にうるさいわけではなく、常にエラーでスクリプトを終了している場合は、必要なものを達成するための防弾の方法があります
set -e
スクリプトの最初に追加します。
「ヘルプセット」から:
-e Exit immediately if a command exits with a non-zero status.