我正在运行一个总是打印一些输出的命令。我只想在命令失败时查看输出。
像这样的东西: % (echo OK; true) | FILTER % (echo ERROR; false) | FILTER ERROR
可以FILTER
使用标准的外壳工具来实现吗?该结构不一定是管道。喜欢的东西FILTER "my_command"
是OK。
PS实际程序是使用Google测试套件实施的单元测试。它总是很冗长,如果成功,输出将变得不那么有趣。
您DONT需要一个子shell在你的情况,你可以看到下面的命令集的退出代码(命令列表相隔“;”),是最后一个命令的集合中的退出代码。因此,在您的示例中只有
true
或false
最后很重要。之前没有任何命令。
最好的方法是使用command-substitution($()
),将输出捕获到变量中,并使用shell内置||
操作符,该操作符仅在前一个命令的返回码失败时才运行后一个命令。
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列表具有以下形式command1 && command2
命令2,如果执行,且仅当是command1返回零退出状态。或列表具有以下形式
command1 || command2
命令2被执行,当且仅当是command1返回非零退出状态。AND和OR列表的返回状态是列表中最后执行的命令的退出状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句