web-dev-qa-db-fra.com

Comment rediriger toutes les sorties vers / dev / null?

Je souhaite exécuter un programme (google-chrome) en arrière-plan, mais l'empêcher de transmettre des messages au terminal.

J'ai essayé de faire ceci:

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

Cependant, le terminal se remplit toujours sans messages tels que:

[5746: 5746: 0802/100534: ERREUR: object_proxy.cc (532)] Échec de l'appel de la méthode: org.chromium.Mtpd.EnumerateStorag ...

Qu'est-ce que je fais mal? Comment rediriger tous la sortie vers /dev/null?

58
Benubird

Les opérateurs de redirection sont évalués de gauche à droite. ce que vous avez fait de mal a été placé en premier sur 2>&1, ce qui indique 2 au même endroit que 1 actuellement pointé sur l'écran du terminal local car vous n'avez pas redirigé 1 Encore. Ce que vous devez faire est l’un des éléments suivants:

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

ou

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

L'emplacement des opérateurs de redirection par rapport à la commande n'a pas d'importance. Vous pouvez les mettre avant ou après la commande.

65
Michael Martinez

Dans la section Redirection le manuel de référence de bash dit:

L'opérateur [n]>&Word est utilisé [...] pour dupliquer les descripteurs de fichier de sortie

Pour rediriger stderr et stdout vers file, vous devez utiliser le formulaire

&>file

En ce qui concerne votre cas, cela signifie remplacer

2>&1 1>/dev/null

avec

&>/dev/null
37
user1146332

Il semble que la syntaxe soit différente:

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

Voir les périphériques pour FD = 2 sont différents lorsque ./a.out 1>/dev/null 2>&1 et ./a.out 2>&1 1>/dev/null &

1) FD = 2 points vers/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 points vers/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
1
Sergei Kurenkov