我有像这样的 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