私はfoo
どちらかができるプログラムを持っています
- 成功した;
- 印刷
Failure
して失敗します。 - または何か他のものを印刷して失敗します。
foo && bar
cron で実行する短いスクリプトがあります。ケース 2 はほとんどの場合に当てはまるため、私のメールボックスは cron からの「失敗」メッセージであふれています。
成功からの通知と他のメッセージでの失敗からの通知を保持する「失敗」通知の取得を停止したい。
wrap_foo
のように動作するfoo
が出力しないbash 関数を作成しようとしましたFailure
。このようなもの:
wrap_foo() {
foo | grep -vF "Failure"
}
wrap_foo && bar
ただし、常に失敗するため、成功したbar
場合は実行されません。foo
1つの方法は等価テストの$(foo)
ようですが、出力が長くなる可能性があるため、可能であれば避けたいと思います。
そこで出力を使用mktemp
してリダイレクトする必要foo
がありますか? より簡単な方法がない場合foo
、一時ファイルを削除した後にエラー ステータスを保存して復元するにはどうすればよいですか?
テスト スイートは次のとおりです。
foo_failed() {
echo Failed
false
}
foo_false() {
echo Error
false
}
foo_true() {
echo Something
true
}
bar() {
echo bar
true
}
wrap_foo()
{
$1 | grep -vF Failed
}
run() {
wrap_foo $1 && bar
}
echo should not write anything
run foo_failed
echo should write Error
run foo_false
echo should write Something then bar
run foo_true
一時ファイルを使用したソリューションは次のとおりです。
wrap_foo()
{
T=$(mktemp)
$1 >$T
X=$?
grep -vF Failed $T
rm $T
return $X
}
もっと短くできますか?