シェル スクリプトで jobs コマンドが機能しないのはなぜですか?

シェル スクリプトで jobs コマンドが機能しないのはなぜですか?

コマンドプロンプトで実行すると、jobs -l実行中のジョブのステータスが表示されますが、以下のファイル./tmp.shを実行すると

#! /bin/bash
jobs -l

空の出力が表示されます。

それはなぜですか? また、シェル スクリプト内で特定のジョブのステータスに関する情報を取得するにはどうすればよいでしょうか?

答え1

jobs

仕事内容を表示現在のシェルによって管理されるスクリプトは独自のシェル内で実行されるため、jobsスクリプトのシェルによって管理されるジョブのみが表示されます...

これを実際に見るには、

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

シェル スクリプトの前に開始された「ジョブ」に関する情報をスクリプト内で表示するには、それらを通常のプロセスのように扱い、psetc を使用する必要があります。スクリプト内の変数を使用して、同じ親 PID を共有するプロセスを検索することにより、親シェル (存在する場合、スクリプトが開始されたシェル) によって開始された$PPIDプロセスに制限できます。

答え2

スティーブンが言ったように、新しいシェルを生成するのはおそらくあなたがやりたいことではない。現在のシェル

コードは、次のようsource myscript.shに実行または宣言することで動作します。関数(これは、bashrc 内またはソースとなる別のファイル内にある可能性があります)。

myfunction () {
  jobs -l
} 

私はこれを私のドットファイルご興味があれば。

関連情報