为什么 jobs 命令在 shell 脚本中不起作用?

为什么 jobs 命令在 shell 脚本中不起作用?

如果我jobs -l在命令提示符下运行,它会显示正在运行的作业的状态,但如果我在文件 ./tmp.sh 下运行

#! /bin/bash
jobs -l

它显示空输出。

这是为什么?如何获取有关 shell 脚本内特定作业状态的信息?

答案1

jobs

显示职位由当前 shell 管理。您的脚本在其自己的 shell 内运行,因此jobs只会显示由脚本的 shell 管理的作业...

要查看实际效果,请运行

#!/bin/bash
sleep 60 &
jobs -l

要查看有关在脚本内部的 shell 脚本之前启动的“作业”的信息,您需要将它们视为常规进程,并使用psetc。您可以将自己限制为由父 shell(启动脚本的 shell)启动的进程,如果有的话)通过使用$PPID脚本内的变量,并查找共享相同父PID的进程。

答案2

正如斯蒂芬所说,生成一个新的 shell 可能不是你想要做的。您必须运行中的代码当前外壳

您的代码可以通过source myscript.sh在 a 中执行或声明您的代码来工作功能(它可能位于您的 bashrc 或来源的单独文件中)。

myfunction () {
  jobs -l
} 

我用这个在我的点文件,如果你有兴趣的话。

相关内容