我正在运行一个命令,总是打印一些输出。我只想在命令失败的情况下看到输出。管道命令抑制成功输出
事情是这样的: % (echo OK; true) | FILTER % (echo ERROR; false) | FILTER ERROR
可以FILTER
使用标准的shell工具来实现? 结构不一定是管道。像FILTER "my_command"
就好。
P.S.实际的程序是一个单元测试,使用Google测试套件实施。它总是非常冗长,并且在成功的情况下,输出不是很有趣。
我正在运行一个命令,总是打印一些输出。我只想在命令失败的情况下看到输出。管道命令抑制成功输出
事情是这样的: % (echo OK; true) | FILTER % (echo ERROR; false) | FILTER ERROR
可以FILTER
使用标准的shell工具来实现? 结构不一定是管道。像FILTER "my_command"
就好。
P.S.实际的程序是一个单元测试,使用Google测试套件实施。它总是非常冗长,并且在成功的情况下,输出不是很有趣。
您DONT需要在你的情况下,一个子shell,因为你可以看到下面的命令集的退出代码(由分开的命令列表“;”),是最后一个退出代码在集合中的命令。所以最后只有
true
或false
在你的例子中很重要。事情之前没有任何命令。
要做到这一点是使用命令替换($()
)的最佳方式,捕获输出给一个变量,并使用内置||
运营商的壳,在运行后续命令只有在返回代码以前的命令是失败的。
var=$(echo ERROR); false || printf "%s\n" "$var"
ERROR
var=$(echo ERROR); true || printf "%s\n" "$var"
上述条款的倒数是
var=$(echo ERROR); true && printf "%s\n" "$var"
ERROR
var=$(echo ERROR); false && printf "%s\n" "$var"
见什么man
页对此有什么看法为COMMAND LISTS
AND和OR列表是多个管道,一个序列分别由控制运营商
&&
和||
分隔。AND
和OR
列表以左结合执行。一个AND序列,当且仅当命令1返回零退出状态command1 && command2
命令2执行表格。一个OR序列的形式
command1 || command2
命令2执行,当且仅当命令1返回一个非零退出状态。 AND和OR列表的返回状态是在列表中执行的最后一个命令的退出状态。
你可以重定向标准输出到/ dev/null与此:
command 1>/dev/null
这样一来,仅显示错误消息。
这不是我要求的。我想在成功时取消所有输出,显示所有错误输出。 – ugoren
总会有一个子外壳存在吗? '()'或者这里显示的一个例子? – Inian
'a = $(echo OK; true)||回声“$ a”'; 'a = $(echo ERROR; false)||回声“$ a”'; – anishsane
@Inian,不 - 子壳只是一个尝试写一个明确的例子。 – ugoren