web-dev-qa-db-fra.com

Comment faire taire la sortie dans un script Bash?

J'ai un programme qui génère des sorties vers stdout et je voudrais faire taire cette sortie dans un script Bash lors de la création d'un fichier.

Par exemple, l'exécution du programme générera:

% myprogram
% WELCOME TO MY PROGRAM
% Done.

Je veux que le script suivant ne génère rien sur le terminal:

#!/bin/bash
myprogram > sample.s
115
Sam

Si cela sort aussi, vous voudrez le faire taire. Vous pouvez le faire en redirigeant le descripteur de fichier 2:

# Send stdout to out.log, stderr to err.log
myprogram > out.log 2> err.log

# Send both stdout and stderr to out.log
myprogram &> out.log      # New bash syntax
myprogram > out.log 2>&1  # Older sh syntax

# Log output, hide errors.
myprogram > out.log 2> /dev/null
160
John Kugelman

2>&1

avec cela vous allez rediriger le stderr (qui est le descripteur 2) vers le descripteur de fichier 1 qui est le stdout 

myprogram > sample.s

Maintenant, lorsque vous effectuez cette opération, vous redirigez le stdout vers le fichier sample.s

myprogram > sample.s 2>&1

La combinaison des deux commandes aboutira à la redirection de stderr et stdout vers sample.s

myprogram 2>&1 >/dev/null

Si vous voulez que votre application soit complètement silencieuse

48
Debugger

Toutes les sorties:

scriptname &>/dev/null

Portable:

scriptname >/dev/null 2>&1

Portable:

scriptname >/dev/null 2>/dev/null

Pour les bash les plus récents (pas de portable):

scriptname &>-
31
Eduardo Cuomo

Si vous voulez STDOUT et STDERR à la fois [tout], le moyen le plus simple est:

#!/bin/bash
myprogram >& sample.s

puis exécutez-le comme ./script et vous n'obtiendrez aucune sortie sur votre terminal. :)

le "> &" signifie STDERR et STDOUT. le & fonctionne également de la même manière avec un tube: ./script |& sed qui enverra tout à sed

10
Matt

Si vous avez encore du mal à trouver une réponse, en particulier si vous avez généré un fichier pour la sortie, et que vous préférez une alternative claire: echo "hi" | grep "use this hack to hide the oputut :) "

7
Henry H.

Essayez avec:

myprogram &>/dev/null

obtenir aucune sortie

4
Swathi

Remarque: cette réponse est liée à la question "Comment désactiver l'écho lors de l'exécution d'un script shell Linux" qui a été marquée comme dupliquée par celle-ci.

Pour désactiver l’écho, la commande est la suivante:

stty -echo

(Ceci est, par exemple, lorsque vous voulez entrer un mot de passe et que vous ne voulez pas qu'il soit lisible. N'oubliez pas d'activer l'écho à la fin de votre script, sinon la personne qui exécute votre script ne verra/elle entre à partir de ce moment-là.

écho stty

0
Berni