我有一个名为go.sh
python3 bob.py &> lol.log &
python3 alice.py &> lol2.log &
当我跑./go.sh
然后跑jobs
。我执行过的所有工作都没有go.sh
出现在jobs
.事实上,什么也没有出现jobs
。
然而,当我逐个运行每个命令时go.sh
,它确实出现在jobs
.
我怎样才能解决这个问题?
答案1
我假设您go.sh &
不只是运行go.sh
and then jobs
,因为这是微不足道的(一旦结束就不会报告任何工作)。
您的脚本在后台启动两项作业,然后就完成了。所以你看不到它。您也看不到脚本启动的作业,因为它是另一个 shell。如果您想查看作业,而不是执行脚本,请获取它。
. go.sh; jobs
现在您应该看到列出的两个职位。
如果您更喜欢执行脚本并仍将其视为一项作业,请告诉它等待其子级完成。wait
在结束之前添加。您还可以jobs
从脚本内调用。
答案2
仅当作业是您正在键入的 shell 的直接子级时,它才会出现在“jobs”中。该脚本在新进程的子 shell 中运行,因此不是登录 shell 的子级,并且对登录 shell 不可见。