管道命令抑制成功输出



我正在运行一个命令,该命令总是打印一些输出。我只想在命令失败时才看到输出。

这样的东西: % (echo OK; true) | FILTER % (echo ERROR; false) | FILTER ERROR

可以使用标准外壳工具实现FILTER吗?结构不一定是管道。像FILTER "my_command"一样可以。

P.S。实际程序是使用Google测试套件实施的单元测试。它总是很冗长,如果成功的情况,输出并不有趣。

you dont 在您的情况下需要一个子壳,如下所示,命令集的退出代码(命令列表';'';')是退出代码集合中的最后命令。因此,最终只有truefalse在您的示例中很重要。没有任何命令。

最好的方法是使用命令固定体($()),将输出捕获到变量并使用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

的评价

和和/或列表是分别由&&||控制运算符隔开的更多管道之一的序列。ANDOR列表以左图执行。AN和列表具有表格

command1 && command2

command2 在当时执行,并且仅当 command1 返回零的退出状态时。或列表具有表格

command1 || command2

command2 在且仅当 command1 返回非零退出状态时执行。返回状态和或列表是列表中执行的最后一个命令的退出状态。

您可以将STDOUT重定向到/dev/null:

command 1>/dev/null

这样,只会出现错误消息。

最新更新