我正在运行一个命令,该命令总是打印一些输出。我只想在命令失败时才看到输出。
这样的东西:
% (echo OK; true) | FILTER
% (echo ERROR; false) | FILTER
ERROR
可以使用标准外壳工具实现FILTER
吗?结构不一定是管道。像FILTER "my_command"
一样可以。
P.S。实际程序是使用Google测试套件实施的单元测试。它总是很冗长,如果成功的情况,输出并不有趣。
you dont 在您的情况下需要一个子壳,如下所示,命令集的退出代码(命令列表';'';')是退出代码集合中的最后命令。因此,最终只有
true
或false
在您的示例中很重要。没有任何命令。
最好的方法是使用命令固定体($()
),将输出捕获到变量并使用shell内置的||
运算符,该操作员仅在上一个之前的返回代码时才运行后续命令命令是故障。
var=$(echo ERROR); false || printf "%sn" "$var"
ERROR
var=$(echo ERROR); true || printf "%sn" "$var"
上述子句的倒数将为
var=$(echo ERROR); true && printf "%sn" "$var"
ERROR
var=$(echo ERROR); false && printf "%sn" "$var"
查看man
页面对COMMAND LISTS
和和/或列表是分别由
&&
和||
控制运算符隔开的更多管道之一的序列。AND
和OR
列表以左图执行。AN和列表具有表格command1 && command2
command2 在当时执行,并且仅当 command1 返回零的退出状态时。或列表具有表格
command1 || command2
command2 在且仅当 command1 返回非零退出状态时执行。返回状态和或列表是列表中执行的最后一个命令的退出状态。
您可以将STDOUT重定向到/dev/null:
command 1>/dev/null
这样,只会出现错误消息。