有人能解释一下我为什么会从下面的代码中得到141的退出代码吗?
#!/usr/bin/bash
set -o pipefail
zfs list | grep tank
echo a ${PIPESTATUS[@]}
zfs list | grep -q tank
echo b ${PIPESTATUS[@]}
cat /etc/passwd | grep -q root
echo c ${PIPESTATUS[@]}
我理解
...
a 0 0
b 141 0
c 0 0
据我理解,退出码141表示失败,但是上面一行显示零,所以应该是成功,我认为。
SIGPIPE
是信号13,因此141-128=13表示您的程序是由SIGPIPE
终止的。 - chepnerset -o pipefail
和grep -q
,因为我想保留它们,由于我需要从SSH进行大量解析。 - Sandra Schlichtinggrep
时不要使用-q
选项,而是将输出重定向至/dev/null
并合并标准输出和错误输出:1> /dev/null 2>&1
。理论上,稍微慢一些,因为grep
将处理整个输入,但实际上:它能运行。 - kevinarpe