バックグラウンドでジョブを実行する場合、Bash は非常に冗長です。
$ echo toto&
toto
[1] 15922
[1]+ Done echo toto
ジョブを並行して実行して出力を使用しようとしているので、bash をサイレントにする方法を見つけたいと思います。この余分な出力を削除する方法はありますか?
バックグラウンドでジョブを実行する場合、Bash は非常に冗長です。
$ echo toto&
toto
[1] 15922
[1]+ Done echo toto
ジョブを並行して実行して出力を使用しようとしているので、bash をサイレントにする方法を見つけたいと思います。この余分な出力を削除する方法はありますか?
括弧を使用してサブシェルでバックグラウンド コマンドを実行すると、ジョブ制御メッセージがサイレンスされます。例えば:
(sleep 10 & )
ダミースクリプトでラップします。
Quiet.sh:
#!/bin/bash
$@ &
次に、それを呼び出し、コマンドを引数として渡します。
./quiet.sh echo toto
入力によっては、引用符で遊ぶ必要がある場合があります。
インタラクティブに、いいえ。常にジョブ ステータスが表示されます。を使用してステータスが表示されるタイミングに影響を与えることができますset -b
。
コマンドの出力を使用することを妨げるものは何もありません (パイプを介して、または変数を保存するなど)。ジョブのステータスはシェルによって制御端末に送信され、他の I/O と混在しません。ジョブで複雑なことをしている場合、解決策は別のスクリプトを書くことです。
ジョブメッセージが実際に問題になるのは、たとえば、対話型環境に直接アクセスしたいジョブ制御を利用する関数が bashrc にある場合だけです。残念ながら、それについてあなたができることは何もありません。
1つの解決策(とにかくbashで)は、すべての出力を /dev/null にルーティングすることです
echo 'hello world' > /dev/null &
上記では、bg プロセスの ID 以外の出力は得られません。