Question Qu'est-ce que la sortie en / dev / null accomplit dans les scripts bash? [dupliquer]


Cette question a déjà une réponse ici:

Souvent, je rencontre des petits scripts bash qui utilisent ce type de syntaxe dans les instructions if:

un peu de commande > /dev/null 2>&1

Quel est le but de la sortie vers /dev/null comme ça, et que fait le 2>&1 signifier?

Cela semble toujours fonctionner mais j'aimerais savoir ce que ça fait.


96
2017-11-08 14:20


origine


Pas sûr pourquoi cette question a été marquée comme dupe, il était clairement ouvert pendant 3 ans avant que l'autre ait été même affiché. - javanix
muru a gagné ses galons et, bien qu’il soit de temps en temps en train de perdre son jugement, je lui fais confiance pour clore cette question même s’il a 3 ans de plus, comme vous le dites. Je n'ai lu ni la question ni les réponses, mais je suppose que son jugement repose sur le fait qu'il existe de meilleures réponses de l'autre. Par coïncidence, je viens d'implémenter: "bash -c" echo $ IntBrightness | sudo tee $ backlight "> / dev / null` ce soir pour supprimer les sorties de terminaux indésirables. Vous pouvez signaler cela avec un mod et demander que toutes les réponses des candidats dupe soient fusionnées dans ce Q & A. On dirait que beaucoup de travail cependant ... - WinEunuuchs2Unix
Je viens de remarquer que vous étiez l'OP et non un passant. J'ai passé en revue les deux questions et je vote pour rouvrir votre question. Je pense que le tien est plus général et convient à mes besoins ce soir (se débarrasser de 650 ou 3000 renvoyé à l'écran en fonction des niveaux de luminosité nocturne ou diurne. Alors que l’autre question concerne strictement les messages d’erreur (File Descriptor 2> / dev / null), un exemple notoire est Gtk transient parent dans Zenity et Yad qui utilisent Windows Dialog au lieu de Windows complet. Mon premier commentaire était trop rapide ... PS avec formatage: bash -c "echo $IntBrightness | sudo tee $backlight" > /dev/null - WinEunuuchs2Unix


Réponses:


>/dev/null redirige la sortie standard de la commande vers le périphérique null, qui est un périphérique spécial qui ignore les informations qui lui sont écrites

2>&1 redirige le flux d'erreur standard vers le flux de sortie standard (stderr = 2, stdout = 1). Notez que cela prend le flux d'erreur standard et le pointe vers le même emplacement que la sortie standard à ce moment. Ceci est la raison de la commande >/some/where 2>&1 car il faut d'abord pointer stdout vers quelque part et puis pointez stderr vers le même emplacement si vous souhaitez combiner les deux flux à la fin.

En pratique, cela empêche l'affichage de toute sortie de la commande (stdout et stderr). Il est utilisé lorsque vous ne vous souciez pas de la sortie de commande.


130
2017-11-08 14:31



Et qu'est-ce que ça & avant 1 indiquer dans 2 >&1 - Nobody
@Nobody "& indique que ce qui suit est un descripteur de fichier et non un nom de fichier." stackoverflow.com/a/818284/5948237 - Vivek Chavda


STDIN est représenté par 0, STDOUT par 1 et STDERR par 2.

/ dev / null est le bit-bucket: l'endroit où vous videz tout ce dont vous n'avez pas besoin.


Ainsi, le STDOUT est redirigé vers le bit-bucket (la corbeille) et le STDERR est redirigé vers l'emplacement du STDOUT: le bit-bucket.


Vous pouvez aussi faire ceci:

>/dev/null 2>/dev/null

53
2017-11-08 14:59



Bonne explication Je pense aussi qu'il y a un raccourci pour ce qui précède: &> / dev / null - Chip Castle
Les raccourcis &> et >& sont un peu mal vu parce que ce sont des "bashism" - ils travaillent avec bash shell mais ne sont pas compatibles avec d'autres shells compatibles POSIX. le >... 2>&1 ... la syntaxe fonctionne dans chaque shell compatible POSIX. - Mikko Rantalainen