bash, étant un shell , a 2 flux que vous pouvez rediriger ces données de sortie: stdout et stderr, car cette sortie doit être redirigée quelque part, linux a un nœud spécifique `` tout supprimer '' accessible via / dev / null . Tout ce que vous envoyez là-bas disparaîtra dans le vide.
(les shells ont également un flux d'entrée mais je vais l'ignorer ici puisque vous avez demandé la suppression de la sortie)
Ces flux sont représentés par des nombres: 1 pour stdout et 2 pour stderr.
Donc, si vous voulez rediriger juste stdout, vous le feriez avec les opérateurs <
et >
(essentiellement là où il pointe, c'est vers où les données circulent)
supposons que nous voulions supprimer stdout (rediriger vers / dev / null):
psql db -f sql.sql > /dev/null
Comme vous pouvez le voir, stdout est la valeur par défaut, aucun numéro de flux n'a été utilisé si vous vouliez utiliser le numéro de flux que vous écririez
psql db -f sql.sql 1> /dev/null
Maintenant, si vous souhaitez supprimer stderror (flux numéro 2), vous utilisez
psql db -f sql.sql 2> /dev/null
Vous pouvez également rediriger un flux vers un autre, par exemple stderror vers stdout, ce qui est utile si vous souhaitez enregistrer toute la sortie quelque part, régulière et erreurs.
psql db -f sql.sql 2>&1 > log.txt
attention, il ne peut pas y avoir d'espaces entre 2>&1
Enfin et parfois le plus intéressant est le fait que vous pouvez supprimer toutes les sorties en utilisant &>
, pour quand vous le voulez 'parfaitement silencieux'
psql db -f sql.sql &> /dev/null
PAGER="/dev/null" psql db -P pager=always -f sql.sql
toujours le faire tuer la sortie.