在 bash 脚本输出中捕获退出代码到屏幕并记录

catch exit code in bash script output to screen and log

我正在尝试合并 2 条单独工作的线路,但我无法让它们一起工作。要捕获并退出 1 的代码:

Python script.py > /logfile.log 2>&1
ret=$?
if [ $ret -ne 0 ]; then
     exit $ret
fi

将脚本结果输出到屏幕和日志文件:

Python script.py 2>&1 | tee /logfile.log 

我想结合这 2 个命令,以便脚本将输出到屏幕和日志文件,并且还会捕获退出代码 1 以在脚本失败时中止脚本。我尝试以不同的方式组合它们,但脚本要么继续 运行,要么没有任何内容输出到屏幕。可以这样做吗?

使用数组 PIPESTATUS:

Python script.py 2>&1 | tee /logfile.log
ret="${PIPESTATUS[0]}"
if [[ "$ret" -ne "0" ]]; then
  exit "$ret"
fi

来自man bash

PIPESTATUS: An array variable (see Arrays below) containing a list of exit status values from the processes in the most- recently-executed foreground pipeline (which may contain only a single command).