というファイルがありますgo.sh
python3 bob.py &> lol.log &
python3 alice.py &> lol2.log &
私が走っているときは、./go.sh
以下を実行してくださいjobs
。私がしたことは実際には何も表示されませんgo.sh
でした。jobs
jobs
ただし、各コマンドを1つずつ実行するとgo.sh
表示されますjobs
。
この問題をどのように解決できますか?
答え1
私はあなたがgo.sh &
ただ実行しないと仮定していますgo.sh
。それからjobs
それは些細なことだからです(終わった後は何も報告されません)。
スクリプトはバックグラウンドで2つの操作を開始してから完了します。だからあなたはそれを見ることができません。また、他のシェルなので、スクリプトによって開始された操作を見ることはできません。スクリプトを実行する代わりにタスクを表示するには、このスクリプトを入手してください。
. go.sh; jobs
これで、2つの役職がリストされていることがわかります。
スクリプトを実行してまだジョブとして処理するには、その子孫が完了するまで待つように指示します。wait
終了する前に追加しました。jobs
スクリプト内で呼び出すこともできます。
答え2
ジョブは、入力しているシェルの直系子である場合にのみ「ジョブ」に表示されます。スクリプトは新しいプロセスのサブシェルで実行されるため、ログインシェルのサブシェルではなく、ログインシェルには表示されません。