52

バックグラウンドでジョブを実行する場合、Bash は非常に冗長です。

$ echo toto&
toto
[1] 15922
[1]+  Done                    echo toto

ジョブを並行して実行して出力を使用しようとしているので、bash をサイレントにする方法を見つけたいと思います。この余分な出力を削除する方法はありますか?

4

5 に答える 5

57

括弧を使用してサブシェルでバックグラウンド コマンドを実行すると、ジョブ制御メッセージがサイレンスされます。例えば:

(sleep 10 & )
于 2012-06-19T23:45:39.667 に答える
1

ダミースクリプトでラップします。

Quiet.sh:

#!/bin/bash
$@ &

次に、それを呼び出し、コマンドを引数として渡します。

./quiet.sh echo toto

入力によっては、引用符で遊ぶ必要がある場合があります。

于 2012-06-19T09:23:36.037 に答える
1

インタラクティブに、いいえ。常にジョブ ステータスが表示されます。を使用してステータスが表示されるタイミングに影響を与えることができますset -b

コマンドの出力を使用することを妨げるものは何もありません (パイプを介して、または変数を保存するなど)。ジョブのステータスはシェルによって制御端末に送信され、他の I/O と混在しません。ジョブで複雑なことをしている場合、解決策は別のスクリプトを書くことです。

ジョブメッセージが実際に問題になるのは、たとえば、対話型環境に直接アクセスしたいジョブ制御を利用する関数が bashrc にある場合だけです。残念ながら、それについてあなたができることは何もありません。

于 2012-06-19T10:08:21.677 に答える
-1

1つの解決策(とにかくbashで)は、すべての出力を /dev/null にルーティングすることです

    echo 'hello world' > /dev/null &

上記では、bg プロセスの ID 以外の出力は得られません。

于 2012-09-14T19:12:16.357 に答える