如何获取通过管道传输到 tee 的进程的退出代码?

如何获取通过管道传输到 tee 的进程的退出代码?

我有像这样的 bash 代码(Mac OS X):

foo.sh | tee foo.log echo $?

问题是 $? 包含 tee 的退出代码,而不是 foo.sh 的退出代码。如何获取 foo.sh 的退出代码?

答案1

环境变量$PIPESTATUS是管道中所有进程的退出状态数组。

答案2

也可以使用子 shell:

tm@hoegaarden:~$ cat foo.sh
#!/bin/bash

echo "stuff and junk"

exit 123
tm@hoegaarden:~$ (./foo.sh ; echo $? > ./retval ) | tee output
stuff and junk
tm@hoegaarden:~$ cat retval 
123

相关内容