web-dev-qa-db-ja.com

シェルからバックグラウンドでプログラムを使用してファイルを開く

バックグラウンドでbashShellからプログラム、たとえばevinceを起動するコマンドは

evince &

しかし、バックグラウンドでエビデンスを使用してファイルを開きたい場合はどうなりますか? evince myfile.pdf &evince & myfile.pdfも期待どおりに機能しません。最初は[2] 5356のようなものを出力しますが、次の行でシェルはロックを返します。 2番目は証拠の空のインスタンスを開きます。

では、どの構文を使用できますか?

4
BowPark

プログラムを起動すると、メッセージが出力されることがあります。バックグラウンドで起動すると、メッセージを表示できるようにフォアグラウンドに戻すまでプログラムがロックする場合があります。解決策は、プログラムがバックグラウンドで実行し続けることができるように、stdoutとstderrをリダイレクトすることです。これを行う1つの方法は次のとおりです。

evince myfile.pdf >~/evince.errs 2>&1 &

上記は、evinceが表示したいメッセージを含むファイルをホームディレクトリに作成します。

Evinceのメッセージが重要でないと確信している場合は、ファイルを作成せずにメッセージを破棄できます。

evince myfile.pdf >/dev/null 2>&1 &

上記のコマンドのいずれかを実行すると、シェルは[1] 1234のようなメッセージを生成し、シェルプロンプトが表示されます。 Graemeが示唆しているように、シェルプロンプトが表示されない場合は、Enterキーをもう一度押してみてください。

4
John1024
evince myfile.pdf

CTRL + Z

bg

これにより、プログラムが開き、一時停止してから、バックグラウンドで実行されます。

または:

( evince myfile.pdf ) &

(subshell)evinceを開き、(subshell)を背景にします。それは単純に少し奇妙です:

evince myfile.pdf &

それは私のために働くので、しかし、動作しません。

あなたはしたいかもしれない:

echo $-

そして、ジョブ制御パラメータを確認してください。私はお勧め:

set -b

まだ使用していない場合。行う:

man set

詳細については。または私の他の答えを参照してください ここ

5
mikeserv