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

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

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

#! /bin/bash
jobs -l

空の出力を表示します。

なぜそんなことですか?シェルスクリプト内で特定のジョブの状態に関する情報をどのように取得できますか?

答え1

jobs

採用発表を見る現在のシェルで管理。スクリプトは独自のシェル内で実行されるため、jobsスクリプトシェルによって管理されているタスクのみが表示されます。

実際に表示するには、以下を実行してください。

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

スクリプト内のシェルスクリプトの前に開始された「作業」に関する情報を表示するには、それを一般的なプロセスとして扱って使用する必要がありますps。スクリプト内の変数を使用して、親シェル(存在する場合はスクリプトを起動したシェル)から開始されたプロセスに自分自身を制限し、$PPID同じ親PIDを共有するプロセスを見つけることができます。

答え2

Stephenが言ったように、新しいシェルを作成することはおそらくあなたが望むものではありません。次のコードを実行する必要があります。現在のシェル

コードは、次のsource myscript.shコードを実行または宣言することで動作できます。機能(bashrcまたはソースの別々のファイルにある可能性があります)。

myfunction () {
  jobs -l
} 

私はこれを使うマイドットファイル、興味があれば。

関連情報