私はfooどちらかができるプログラムを持っています
- 成功した;
- 印刷
Failureして失敗します。 - または何か他のものを印刷して失敗します。
foo && barcron で実行する短いスクリプトがあります。ケース 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
}
もっと短くできますか?