2013-08-02 16 views
54

Ich möchte ein Programm (google-chrome) im Hintergrund ausführen, aber verhindern, dass es Nachrichten an das Terminal ausgibt.Wie umleiten alle Ausgabe nach/dev/null?

ich versucht das zu tun:

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

jedoch füllt das Terminal immer noch ohne Nachrichten wie:

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

Was mache ich falsch? Wie umleitung ich alle die Ausgabe zu /dev/null?

Antwort

57

Umleitungsoperatoren werden von links nach rechts ausgewertet. Was Sie falsch gemacht haben, wurde 2>&1 zuerst gesetzt, die 2 auf den gleichen Ort wie 1 zeigt derzeit auf die lokale Terminal-Bildschirm ist, weil Sie nicht bereits 1 umgeleitet haben. Was Sie tun müssen, ist eine der folgenden:

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

oder

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

Die Platzierung der Umleitungs-Betreiber in Bezug auf den Befehl keine Rolle spielt. Sie können sie vor oder nach dem Befehl einfügen.

+0

Vielen Dank für die bitweise Notation: D – erm3nda

+1

Die richtige Antwort finden Sie unter http://stackoverflow.com/a/18013171/1432614 –

34

in dem Referenzhandbuch Abschnitt Redirection bash sagt:

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

Um sowohl stderr und stdout-file leiten Sie das Formular

&>file 

Im Hinblick auf Ihren Fall verwenden sollen, den Ersatz

bedeutet
2>&1 1>/dev/null 

mit

&>/dev/null 
+3

'>/dev/null 2> & 1' ist vielleicht tragbarer als' &>/dev/null'? – Campa

1

Es scheint, dass Syntax ist anders:

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

Siehe die Geräte für FD = 2 verschieden sind, wenn ./a.out 1>/dev/null 2>&1 und ./a.out 2>&1 1>/dev/null &

1) FD = 2 Punkte auf/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 Punkte nach/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 
Verwandte Themen