我有一个foo
程序可以
- 成功;
- 打印
Failure
失败; - 或打印其他内容并失败。
我有一个foo && bar
由 cron 运行的简短脚本。情况 2 几乎总是如此,所以我的邮箱被来自 cron 的“失败”消息淹没了。
我想停止收到“失败”通知,保留成功通知和其他消息失败的通知。
我试图编写一个wrap_foo
行为类似于foo
但不打印的 bash 函数Failure
。像这样的东西:
wrap_foo() {
foo | grep -vF "Failure"
}
wrap_foo && bar
但它总是失败,所以bar
如果foo
成功则不会执行。
一种方法似乎是平等测试,$(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
}
能不能短一点?