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