為什麼 jobs 指令在 shell 腳本中不起作用?

為什麼 jobs 指令在 shell 腳本中不起作用?

如果我jobs -l在命令提示字元下運行,它會顯示正在運行的作業的狀態,但如果我在檔案 ./tmp.sh 下運行

#! /bin/bash
jobs -l

它顯示空輸出。

這是為什麼?

答案1

jobs

顯示職位由目前 shell 管理。您的腳本在自己的 shell 內執行,因此jobs只會顯示由腳本的 shell 管理的作業...

若要查看實際效果,請運行

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

要查看有關在腳本內部的 shell 腳本之前啟動的「作業」的信息,您需要將它們視為常規進程,並使用psetc。如果有的話)透過使用$PPID腳本內的變量,並尋找共享相同父PID的進程。

答案2

正如史蒂芬所說,產生一個新的 shell 可能不是你想要做的。您必須運行中的程式碼目前外殼

您的程式碼可以透過source myscript.sh在 a 中執行或聲明您的程式碼來運作功能(它可能位於您的 bashrc 或來源的單獨文件中)。

myfunction () {
  jobs -l
} 

我用這個在我的點文件,如果你有興趣的話。

相關內容