![为什么 jobs 命令在 shell 脚本中不起作用?](https://linux22.com/image/88649/%E4%B8%BA%E4%BB%80%E4%B9%88%20jobs%20%E5%91%BD%E4%BB%A4%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
如果我jobs -l
在命令提示符下运行,它会显示正在运行的作业的状态,但如果我在文件 ./tmp.sh 下运行
#! /bin/bash
jobs -l
它显示空输出。
这是为什么?如何获取有关 shell 脚本内特定作业状态的信息?
答案1
jobs
显示职位由当前 shell 管理。您的脚本在其自己的 shell 内运行,因此jobs
只会显示由脚本的 shell 管理的作业...
要查看实际效果,请运行
#!/bin/bash
sleep 60 &
jobs -l
要查看有关在脚本内部的 shell 脚本之前启动的“作业”的信息,您需要将它们视为常规进程,并使用ps
etc。您可以将自己限制为由父 shell(启动脚本的 shell)启动的进程,如果有的话)通过使用$PPID
脚本内的变量,并查找共享相同父PID的进程。