0

按照赛勒斯的建议扩展问题,我想知道如果我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但如果我在后台运行它,则不会返回任何输出。

4

1 回答 1

1

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

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

但是由于您在后台运行某些东西,您的if语句可能会在它完成之前运行,那么您希望它测试什么返回值?

你通常想要的是在后台运行一些东西,做一堆工作,然后wait是后台任务,然后才检查它的返回值。

wait将返回后台 shell 的退出状态,这就是实际获取由生成的退出代码的方式exit "${PIPESTATUS[0]}"

于 2019-08-05T03:13:19.583 回答