Comment masquer la sortie d'une application shell sous Linux?

Réponses:

68

Vous pouvez rediriger la sortie de n’importe quel programme afin qu’elle ne soit pas vue.

$ program > /dev/null

Cela redirigera la sortie standard - vous verrez toujours des erreurs

$ program &> /dev/null

Cela redirigera toutes les sorties, y compris les erreurs.

theotherreceive
la source
Le premier ne fonctionnait pas pour wget
Jader Dias
C'est pourquoi wget utilise stderr pour certaines de ses sorties. Le second devrait fonctionner.
theotherreceive
2
Incidemment, vous voudrez peut-être enregistrer cette sortie wget dans un fichier journal. Ainsi, lorsque / si votre téléchargement ne fonctionne plus, vous pouvez comprendre pourquoi. Si c'est dans un script quand même. Si c'est un type ponctuel, alors oui, à la poubelle
Matt Simmons
1
Car wgetvous pouvez utiliser les -qoptions pour le rendre silencieux.
pkhamre
Un moyen de supprimer la sortie écrite directement dans / dev / tty?
d11wtq
30

Trois périphériques IO sont disponibles sur la ligne de commande.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Pour rediriger la sortie standard (sortie par défaut) vers un fichier (et écraser le fichier), utilisez

 command > file.log 

Pour ajouter à file.log, utilisez 2> s

 command >> file.log

pour rediriger l'erreur standard vers le fichier.log, utilisez

 command 2> file.log

et annexer

 command 2>> file.log

Pour combiner les sorties dans un flux et les envoyer au même endroit

 command > file.log 2>&1 

Cela envoie 2 (stderr) dans 1 (stdout) et envoie stdout à file.log

Notez qu'il est également possible de rediriger standard dans une commande qui attend stdin

 command << file.txt 

EDIT
Pour plus de détails, consultez le Advanced Bash Scripting Guide

Matt Simmons
la source
Quelqu'un peut-il expliquer comment ça command > file.log 2>&1marche?
Cory Klein
A quel niveau voudriez-vous savoir?
Matt Simmons
3
@nomoreink: il s'agit en fait de 2 commandes, une > fileet la seconde 2>&1. Le premier redirige la norme vers un fichier. Le second prend le 2ème descripteur de fichier et le redirige vers le premier. Vous pouvez faire l'inverse, rediriger la sortie standard vers l'erreur standard à l'aide de >&2, puis rediriger l'erreur standard vers un fichier avec 2> file.
Hubert Kario
12

Cacher stdout

./command >/dev/null

Cacher stdoutetstderr

./command >/dev/null 2>&1

Masquer stdoutet stderrrelâcher le terminal (exécuter la commande en arrière-plan)

./command >/dev/null 2>&1 &
gommeux
la source
3

Si vous souhaitez simplement masquer la sortie (et non l'enregistrer dans un fichier), vous pouvez utiliser:

Édité:

$ commande &> / dev / null

Lucho
la source
Cela redirigera la sortie vers un fichier nommé null
theotherreceive, le
Il a généré un fichier null
Jader Dias
1
vous n'auriez pas voulu dire / dev / null, n'est-ce pas?
Babu
1
Oui, j'aurais, Babu. Je voulais dire $ commande &> / dev / null. Mes excuses pour avoir tapé trop vite pour mon propre bien.
Lucho
2

Pour Mac OS X (10.6 "Snow Leopard"):

Si vous devez masquer la sortie sans que le programme le sache en vérifiant le descripteur de fichier de sortie / d'erreur, vous pouvez utiliser les éléments suivants dans un shell:

stty flusho; command ;stty -flusho

ou si vous voulez juste cacher l'entrée du terminal à propos:

stty  -echo; command ;stty  echo

Voir la page de manuel stty (1) pour plus d'informations.

Pour Linux, tout ce que je sais, c’est qu’Ubunutu (10.04 "Lucid") et des "Debian / Arch" (commentés ci-dessous - tnx hendry) n’ont pas le flushoparamètre (et je ne vois rien d’autre dans la page de manuel). . Le echoréglage fonctionne de toute façon sur Ubuntu.

vike
la source
Ma stty par défaut sous Debian / Arch ne dispose pas de ces options.
hendry
J'aurais évidemment dû mentionner que je n'étais même pas sur le système d'exploitation du PO. Edité mon post.
Vike