所以我有一个这样的脚本:
somecommad | grep --invert-match something
somecommand
如果失败,我希望能够有条件地运行不同的命令。这是我尝试过的:
somecommand | grep --invert-match something || {
echo 'Oops'
}
但这没有用(grep
没有执行)。这样做的正确方法是什么?
所以我有一个这样的脚本:
somecommad | grep --invert-match something
somecommand
如果失败,我希望能够有条件地运行不同的命令。这是我尝试过的:
somecommand | grep --invert-match something || {
echo 'Oops'
}
但这没有用(grep
没有执行)。这样做的正确方法是什么?
@steeldriver在可能有效的评论中提到
PIPESTATUS
。我试过了,效果很好。这是我所做的:它像以前一样运行命令,但随后我有一个
if
语句来查看PIPESTATUS
数组。我只关心第一个元素,所以这是我看的那个。我检查它失败了(如果退出代码不是0
),它确实失败了,运行echo 'Oops'
另一种方法,取决于所需的确切行为,是使用
pipefail
选项:因此,如果您不在乎哪个
somecommand
或grep
失败,只要其中一个确实失败了: