73

プログラム ( ) をバックグラウンドで実行したいのですがgoogle-chrome、ターミナルにメッセージが出力されないようにします。

私はこれをやってみました:

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

ただし、端末は次のようなメッセージなしでいっぱいになります。

[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] メソッドの呼び出しに失敗しました: org.chromium.Mtpd.EnumerateStorag...

私は何を間違っていますか?すべての出力をにリダイレクトするにはどうすればよい/dev/nullですか?

4

3 に答える 3

81

リダイレクト演算子は左から右に評価されます。まだリダイレクトしていないため、現在ローカル端末画面を指しているのと同じ場所2>&1を指している最初の場所を誤って配置しました。次のいずれかを行う必要があります。211

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

または

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

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

于 2013-08-02T19:38:25.437 に答える
46

Redirectionのセクションで、Bash のリファレンス マニュアルには次のように記載されています。

演算子[n]>&wordは [...] 出力ファイル記述子を複製するために使用されます

標準エラーと標準出力の両方をリダイレクトfileするには、フォームを使用する必要があります

&>file

あなたのケースに関しては、それは代用を意味します

2>&1 1>/dev/null

&>/dev/null
于 2013-08-02T09:19:01.263 に答える
3

構文が異なるようです:

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

FD = 2 のデバイスは、 と の場合./a.out 1>/dev/null 2>&1で異なります。./a.out 2>&1 1>/dev/null &

1) FD=2 は /dev/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
于 2013-08-02T09:19:08.557 に答える