2013-08-02 18 views
54

バックグラウンドでプログラム(google-chrome)を実行したいが、端末にメッセージが出力されないようにしたい。すべての出力を/ dev/nullにリダイレクトする方法は?

私はこれをやってみました:私は間違って何をやっている

[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] Failed to call method: org.chromium.Mtpd.EnumerateStorag...

google-chrome 2>&1 1>/dev/null & 

しかし、端末がまだのようなメッセージなしでいっぱいになりますか? すべての出力を/dev/nullにリダイレクトするにはどうすればよいですか?

答えて

57

リダイレクション演算子は左から右に評価されます。あなたが間違っていたのは、1がまだリダイレクトされていないため、と同じ場所に2を指している2>&1が最初に置かれました。何をする必要がある、次のいずれかです:

2>/dev/null 1>/dev/null google-chrome & 

または

2>/dev/null 1>&2 google-chrome & 

コマンドに関連したリダイレクト演算子の配置は重要ではありません。コマンドの前後に置くことができます。

+0

ビット単位の表記ありがとうございました:D – erm3nda

+1

正しい答えはhttp://stackoverflow.com/a/18013171/1432614 –

34

セクションではRedirectionはbashのリファレンスマニュアルは言う:

The operator [n]>&word is used [...] to duplicate output file descriptors

filestderrstdoutの両方をリダイレクトするには、代替

を意味あなたのケースに関しては、フォーム

&>file 

を使用する必要があります

2>&1 1>/dev/null 
&>/dev/null 
+3

'>/dev/null 2>&1'は、'>/dev/null'より移植性が高いかもしれませんか? – Campa

1

とその構文が異なっていると思われる:

./a.out 1>/dev/null 2>&1 & 

は場合./a.out 1>/dev/null 2>&1./a.out 2>&1 1>/dev/null &

1)FD = 2点の/ dev /へFD = 2ための装置が異なる参照null

>./a.out 1>/dev/null 2>&1 & 
[1] 21181 
>lsof -p `pidof a.out` 
COMMAND PID   USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
a.out 21181 xxxxxxxxxxxxxxx 0u CHR 136,43  0t0  46 /dev/pts/43 
a.out 21181 xxxxxxxxxxxxxxx 1w CHR 1,3  0t0  3685 /dev/null 
a.out 21181 xxxxxxxxxxxxxxx 2w CHR 1,3  0t0  3685 /dev/null 

2)FD = 2は/ dev/pts/43を指します

>./a.out 2>&1 1>/dev/null & 
[1] 25955 
>lsof -p `pidof a.out` 
COMMAND PID   USER FD TYPE DEVICE SIZE/OFF  NODE NAME 
a.out 25955 xxxxxxxxxxxxxxx 0u CHR 136,43  0t0  46 /dev/pts/43 
a.out 25955 xxxxxxxxxxxxxxx 1w CHR 1,3  0t0  3685 /dev/null 
a.out 25955 xxxxxxxxxxxxxxx 2u CHR 136,43  0t0  46 /dev/pts/43 
関連する問題