后台进程 运行 的 PIPESTATUS 是否可跟踪?

Is PIPESTATUS of processes running in background trackable?

按照 Cyrus 的建议扩展 ,我想知道如果我在后台将它发送到 运行,我是否可以使用 PIPESTATUS 或类似的东西跟踪相同的脚本?

bash脚本如下:

#! /bin/bash

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

script.py是:

print("hello")
exit(1);
print("world")

当我 运行 没有 &bash 脚本时,它会正确打印 PIPESTATUS 但如果我 运行 它在后台,则没有输出返回。

首先,正如 Kamil Cuk 所说,如果你想要后台进程的管道状态,你需要:

{ python script.py 2>&1  | tee logfile.log; exit "${PIPESTATUS[0]}" }

但是由于您 运行 在后台执行某些操作,因此您的 if 语句可能 运行 甚至还未完成,那么 return 您的价值是多少?期待它测试?

您通常想要的是在后台 运行 做一些工作,然后 wait 进行后台任务,然后才检查它的 return 值。

wait会return后台的退出状态shell,所以才真正得到exit "${PIPESTATUS[0]}"

生成的退出码