バックグラウンドでbashShellからプログラム、たとえばevinceを起動するコマンドは
evince &
しかし、バックグラウンドでエビデンスを使用してファイルを開きたい場合はどうなりますか? evince myfile.pdf &
もevince & myfile.pdf
も期待どおりに機能しません。最初は[2] 5356
のようなものを出力しますが、次の行でシェルはロックを返します。 2番目は証拠の空のインスタンスを開きます。
では、どの構文を使用できますか?
プログラムを起動すると、メッセージが出力されることがあります。バックグラウンドで起動すると、メッセージを表示できるようにフォアグラウンドに戻すまでプログラムがロックする場合があります。解決策は、プログラムがバックグラウンドで実行し続けることができるように、stdoutとstderrをリダイレクトすることです。これを行う1つの方法は次のとおりです。
evince myfile.pdf >~/evince.errs 2>&1 &
上記は、evince
が表示したいメッセージを含むファイルをホームディレクトリに作成します。
Evinceのメッセージが重要でないと確信している場合は、ファイルを作成せずにメッセージを破棄できます。
evince myfile.pdf >/dev/null 2>&1 &
上記のコマンドのいずれかを実行すると、シェルは[1] 1234
のようなメッセージを生成し、シェルプロンプトが表示されます。 Graemeが示唆しているように、シェルプロンプトが表示されない場合は、Enterキーをもう一度押してみてください。
evince myfile.pdf
bg
これにより、プログラムが開き、一時停止してから、バックグラウンドで実行されます。
または:
( evince myfile.pdf ) &
(subshell)
でevince
を開き、(subshell)
を背景にします。それは単純に少し奇妙です:
evince myfile.pdf &
それは私のために働くので、しかし、動作しません。
あなたはしたいかもしれない:
echo $-
そして、ジョブ制御パラメータを確認してください。私はお勧め:
set -b
まだ使用していない場合。行う:
man set
詳細については。または私の他の答えを参照してください ここ 。