基本的に、別のコマンドの失敗 (ゼロ以外の終了コード) をアサートし、失敗したときにメッセージを出力する関数を実装しようとしています。
これが私の機能です:
function assert_fail () {
COMMAND=$@
if [ `$COMMAND; echo $?` -ne 0 ]; then
echo "$COMMAND failed as expected."
else
echo "$COMMAND didn't fail"
fi
}
# This works as expected
assert_fail rm nonexistent
# This works too
assert_fail rm nonexistent nonexistent2
# This one doesn't work
assert_fail rm -f nonexixtent
コマンドにオプションを追加するとすぐに機能しません。上記の出力は次のとおりです。
rm: cannot remove `nonexistent': No such file or directory
rm nonexistent failed as expected.
rm: cannot remove `nonexistent': No such file or directory
rm: cannot remove `nonexistent2': No such file or directory
rm nonexistent nonexistent2 failed as expected.
rm -f nonexistent didn't fail
コマンドを二重引用符で囲んでみましたが、役に立ちませんでした。上記の 3 番目の呼び出しでは、他の 2 つの呼び出しと同様の出力が生成されると思います。
あらゆる/すべての助けに感謝します!