我有一个foo
程序,可以
Failure
并失败; 我有一个由cron运行的短脚本foo && bar
。案例2几乎总是如此,所以我的邮箱充斥着来自cron的“失败”消息。
我想停止获取“失败”通知,保留成功通知和其他消息失败的通知。
我尝试编写一个bash函数wrap_foo
,其行为类似foo
但不打印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
}
可以缩短吗?
答案 0 :(得分:0)
使用您的测试套件,我将wrap_foo()
功能修改为以下内容,这似乎有效:
wrap_foo()
{
foooutput=$($1)
foostatus="$?"
echo "$foooutput" | grep -vF Failed
return "$foostatus"
}
输出:
should not write anything
should write Error
Error
should write Something then bar
Something
bar
它只是有点短,但没有涉及临时文件。