管道命令可在成功时抑制输出

乌戈伦

我正在运行一个总是打印一些输出的命令。我只想在命令失败时查看输出。

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

可以FILTER使用标准的外壳工具来实现吗?该结构不一定是管道。喜欢的东西FILTER "my_command"是OK。

PS实际程序是使用Google测试套件实施的单元测试。它总是很冗长,如果成功,输出将变得不那么有趣。

伊尼安

DONT需要一个子shell在你的情况,你可以看到下面的命令集的退出代码(命令列表相隔“;”),是最后一个命令的集合中的退出代码。因此,在您的示例中只有truefalse最后很重要。之前没有任何命令。

最好的方法是使用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列表是分别由&&||运算符分隔的多个管线之一的序列ANDOR列表以左关联性执行。AND列表具有以下形式

command1 && command2

命令2,如果执行,且仅当是command1返回零退出状态。或列表具有以下形式

command1 || command2

命令2被执行,当且仅当是command1返回非零退出状态。AND和OR列表的返回状态是列表中最后执行的命令的退出状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何抑制输出并检查命令是否成功?

如果成功,则通过管道传递命令的输出

仅在命令成功的情况下如何抑制输出?

使用反引号时如何抑制命令输出?

当命令包含管道时,将命令输出存储在变量中

如何在管道之前测试命令,捕获它的输出并了解该命令是否成功运行

如何抑制bash命令的输出

管道命令输出转换?

传递给sed或awk时,冗长的管道命令输出挂起

当管道生成命令的输出时,如何返回错误?

没有管道密钥时如何从命令 grep 输出

在管道命令中使用tee时输出奇怪

仅在“时间”之后的命令成功时才显示“时间”的输出

bash : cat 命令仅在成功时才输出

MySQL输出在管道中被抑制

抑制Jenkins中的脚本化管道输出

在使用“ ls”命令以及将输出分配给变量时,如何抑制stderr?

管道输出到sed的命令

管道输出到删除命令

管道时如何抑制tar错误消息

在变量中捕获命令输出并抑制它

管道查找命令输出到ls命令

如果成功,则分配管道命令的结果

管道时结合grep输出

当两个命令通过管道传递时,将输出重定向到/ dev / null?

当通过管道传输输出时,为什么某些“ for”命令不起作用?

当(仅当)过长时,通过分页器通过管道传递命令输出的最佳方法是什么?

当输出存储在变量中时,“找不到命令”将变量传递给管道以剪切

运行npm脚本时如何抑制输出