J'ai un programme qui sort vers stdout et je voudrais faire taire cette sortie dans un script Bash tout en redirigeant vers un fichier.
Par exemple, l'exécution du programme produira:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Je veux que le script suivant ne produise rien sur le terminal:
#!/bin/bash
myprogram > sample.s
Réponses:
S'il sort également vers stderr, vous voudrez le désactiver. Vous pouvez le faire en redirigeant le descripteur de fichier 2:
la source
&>
est beaucoup plus vieux que bash 4.&>
introduction du journal des modifications ? : o>>&
été introduit dans la version 4.0. Il n'y a aucune mention de&>
mais les CHANGEMENTS ne remontent qu'à 2.0, donc je pense que cela signifie qu'il était déjà en 1.x.git blame
onredir.c
pointe vers un commit 1998 pour l'occurrence la plus ancienne encore dans la base de code actuelle.Rediriger stderr vers stdout
Cela redirigera le stderr (qui est le descripteur 2) vers le descripteur de fichier 1 qui est le stdout.
Rediriger stdout vers un fichier
Maintenant, lorsque vous effectuez cela, vous redirigez le stdout vers le fichier
sample.s
Rediriger stderr et stdout vers un fichier
La combinaison des deux commandes entraînera la redirection à la fois de stderr et de stdout vers sample.s
Rediriger stderr et stdout vers / dev / null
Redirigez vers
/dev/null
si vous souhaitez désactiver complètement votre application.la source
myprogram >/dev/null 2>&1
(notez le coin avant/dev/null
et l'ordre des redirections).myprogram &>/dev/null
?Toutes les sorties:
Portable:
Portable:
Pour les plus récents bash (pas de portable):
la source
-
et&>
est une extension bourne shell non portable.echo moo 1>&-
produit une erreur car le descripteur de fichier 1 est fermé:-bash: echo: write error: Bad file descriptor
Si vous voulez à la fois STDOUT et STDERR [tout], alors le moyen le plus simple est:
puis exécutez-le comme
./script
, et vous n'obtiendrez aucune sortie sur votre terminal. :)le "> &" signifie STDERR et STDOUT. le
&
travaille aussi de la même manière avec un tuyau:./script |& sed
qui va envoyer tout à sedla source
a 2>&1 | b 2>&1 | c
Si vous avez encore du mal à trouver une réponse, surtout si vous avez produit un fichier pour la sortie, et que vous préférez une alternative claire:
echo "hi" | grep "use this hack to hide the oputut :) "
la source
Essayez avec:
pour n'obtenir aucune sortie
la source
Note: 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é à son tour marquée comme dupliquée avec celle-ci.
Pour désactiver réellement l'écho, la commande est:
(c'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 pas ce qu'il / elle tape à partir de ce moment. Pour activer l'écho en cours d'exécution:
la source
Utile dans les scripts:
Obtenez uniquement le STDERR dans un fichier, tout en masquant tout STDOUT même si le programme à masquer n'existe pas du tout (ne bloque jamais le script parent), cela seul fonctionnait:
Détachez complètement et mettez tout au silence, même tuer le script parent n'abandonnera pas
./prog
:la source
Pour sortie uniquement en cas d'erreur :
la source