シェルでバックグラウンドでプロセスを実行するときに「[タスク番号] [PID]」をファイルにリダイレクトするにはどうすればよいですか?

シェルでバックグラウンドでプロセスを実行するときに「[タスク番号] [PID]」をファイルにリダイレクトするにはどうすればよいですか?

このコマンドの出力をリダイレクトしたいと思いますfirefox &。追加する&と、バックグラウンドでコマンドを実行し、それを使用すると受信されることがわかります[number of process in background] [PID]

firefox & > firefoxFile 

ところで開いてみるfirefoxFileと空いていました。見つかりません[number of process in forground] [PID]

答え1

あなたが書いたコメントに

バックグラウンドプロセスのpidと数を見つけたいです。

これはどうですか?

firefox &
pid=$!

echo "The PID for the background process is $pid" >&2

PIDがあれば、もちろん、必要なファイルにその値を書き込むことができます。

答え2

シェルがbash [1]の場合は、次のことを試すことができます。

exec 3>&2 2>firefoxFile; firefox & exec 2>&3-

ここでは、シェル(例:bash)は[jobnum] pidバックグラウンドジョブ通知を印刷します。標準エラー、Firefoxではありません。この組み合わせは一時的にstderrをファイルにリダイレクトし、firefoxFileそのファイルに通知をキャプチャします。そしてFirefox は、ライフタイム中に stderr に何でも記録します。

[jobnum] Done firefoxバックグラウンドジョブが終了すると、印刷されるbashはキャプチャされません。


あなたのコマンドはfirefox & > file2つのコマンドに解析されます1. firefox &firefoxバックグラウンドで実行されます)と2. > file(何も書かずに切り捨てられますfile。) これは確かにあなたが望むものではありません。

[1]読むことができますこここのトリックが他のシェルでは機能しない理由は、stderrがからリダイレクトされる可能性がありますが、そのプロンプトとタスクzsh通知zshはstderrに記録されず、この目的のために特別に開かれた現在の端末を指す他のfdに書き込まれるためです。

答え3

正確ではありませんが、ほぼ似ています。もう少し追加してくださいsed

firefox &
jobs -l | grep -E "\[[0-9]+\]\+" > firefoxFile

関連情報