从这个问题扩展,我们有一个用例,我们希望根据该命令是成功还是失败来管道命令的标准输出。
我们从一个基本的管道开始
command | grep -P "foo"
但是我们注意到有时command
不会向 stdout 输出任何内容,但退出代码为0
. 我们想忽略这种情况,仅grep
在退出代码为1
对于一个工作示例,我们可以实现如下命令:
OUTPUT=$(command) # exit code is 0 or 1
RESULT=$?
if [ $RESULT -eq 0 ]; then
return $RESULT; # if the exit code is 0 then we simply pass it forward
else
grep -P "foo" <<< $OUTPUT; # otherwise check if the stdout contains "foo"
fi
但这有许多缺点,即您必须编写脚本,这意味着您不能只在控制台中执行它。也显得有些业余。
为了更简洁的语法,我正在想象一个虚构的三元运算符,如果退出代码是 ,它会通过管道1
传递,否则它会向前传递退出代码。
command |?1 grep -P "foo" : $?
是否有一系列运算符和实用程序可以实现此结果?