2009-03-05 6 views

Répondre

366

Ce qui suit envoie la sortie standard au périphérique null (compartiment de bits).

et si vous voulez aussi des messages d'erreur à envoyer là-bas, utilisez l'une (la première ne fonctionne pas dans toutes les coquilles):

scriptname &>/dev/null 
scriptname >/dev/null 2>&1 
scriptname >/dev/null 2>/dev/null 

et, si vous voulez enregistrer les messages, mais voir pas, remplacer /dev/null avec un fichier réel, tels que:

scriptname &>scriptname.out 

Pour être complet, sous Windows cmd.exe (où "nUL" est l'équivalent de "/ dev/null"), il est:

scriptname >nul 2>nul 
+8

Remarque que '&>' est propre à bash (et peut-être à des coquilles C); Les shells Korn et Bourne nécessitent 2>/dev/null ou 2> & 1 (pour envoyer stderr au même endroit que stdout). Le shell Korn semble interpréter '&>' comme "exécuter les choses en arrière-plan et en arrière-plan, puis faire la redirection d'E/S sur une commande vide". –

+2

Notez que certaines commandes écrivent directement sur le périphérique terminal plutôt que sur la sortie/erreur standard. Pour tester, mettez 'echo foo> $ (tty)' dans un script et lancez './test.sh &>/dev/null' - La sortie est toujours imprimée sur le terminal. Bien sûr, ce n'est pas un problème si vous écrivez un script qui n'utilise pas de telles commandes. – l0b0

+1

Super! > nul 2> nul fonctionne pour cygwin sous Windows! – yang

30

Quelque chose comme

script > /dev/null 2>&1 

Cela empêchera la sortie standard sortie d'erreur et, les rediriger à la fois /dev/null.

+3

Également réalisé avec juste &> si vous voulez enregistrer un peu de frappe;) – andynormancx

+1

Même si j'ajoute ceci à ma commande gs (GhostScript), il imprime toujours **** Avertissement: Le fichier a un marqueur %% EOF corrompu , ou des déchets après %% EOF. Aucun conseil? – Piero

4

Comme andynormancx après utiliser ceci: (si vous travaillez dans un environnement Unix)

scriptname > /dev/null 

ou vous pouvez utiliser: (si vous travaillez dans un environnement Windows)

scriptname > nul 
+1

Vous pouvez réellement faire mieux que cela dans le shell Windows. Si à la place vous utilisez "scriptname> nul" alors vous n'aurez même pas de fichier à supprimer, car "nul" est l'équivalent Windows de/dev/null. – andynormancx

+1

@andynormancx: C'est ce que je déteste à propos de la disposition du système de fichiers Windows. Il "réserve" les noms de fichiers comme NUL, COM1, LPT1, CON, etc., quel que soit le répertoire dans lequel vous vous trouvez (même si vous êtes dans un système de fichiers pouvant avoir ces noms, comme dans les partages réseau). – dreamlax

+0

Je ne pense pas avoir utilisé NUL depuis DOS 5.x, j'ai soudainement eu un flash de souvenir quand j'ai vu cette réponse;) – andynormancx

7

Essayez

: $(yourcommand) 

: est l'abréviation de "ne rien faire".

$() est juste votre commande.

+1

Très intéressant mais il y a une limitation: le code d'état retourné est toujours '0' (Succès). Voyons un exemple utilisant la commande 'false' qui retourne toujours' 1' (échec). Par exemple '(echo foo | tee fichier; false) && echo bar' affiche' foo'. En utilisant votre astuce pour supprimer la sortie: '(: $ (echo foo | tee fichier; false)) && echo bar'. Mais il affiche 'bar', ce qui signifie que le code de retour est' 0' (ce n'est pas le code retourné par 'false'). Veuillez mettre à jour votre réponse en fournissant cette limitation. A bientôt – olibre

+2

@olibre, qu'en est-il de 'DUMMY = $ (yourcommand)'? Il n'a pas la limitation que vous avez mentionnée. :) – semente

+3

@semente Perfect: La commande 'DUMMY = $ (echo foo | tee fichier; false) && echo bar' n'affiche rien.Et la commande 'DUMMY = $ (echo foo | tee fichier; true) && echo bar' affiche' bar'. Faites-moi savoir si vous fournissez une réponse à upvote ;-) Cheers – olibre

4

Une alternative qui peut tenir dans certaines situations est d'affecter le résultat d'une commande à une variable:

$ DUMMY=`grep root /etc/passwd` 
$ echo $? 
0 
$ DUMMY=`grep r00t /etc/passwd` 
$ echo $? 
1 

Depuis Bash et d'autres interprètes commandline POSIX ne prennent pas en compte les affectations de variables comme une commande, la commande actuelle de le code de retour est respecté.

1

Avec Bash Scripting, comment puis-je supprimer toute sortie d'une commande?


à mon humble avis, je crois que vous pouvez obtenir simple à l'aide de cette redirection, comme observé dans la première réponse, et rien d'autre:

/path/to/command &>/dev/null 


Cet exemple de The Linux Documentation Project est vaut la peine de mentionner également:

3.6 Exemple: fichier stderr et stdout 2

Cela placera chaque sortie d'un programme dans un fichier. Ceci est parfois approprié pour les entrées cron, si vous voulez passer une commande dans le silence absolu.

 rm -f $(find/-name core) &> /dev/null 
1

En vous script, vous pouvez ajouter ce qui suit aux lignes que vous savez va donner une sortie:

some_code 2>>/dev/null 

Ou bien vous pouvez aussi essayer

some_code >>/dev/null 
Questions connexes