Rediriger à la fois stdout et stderr vers /dev/null
:
> /dev/null 2>&1
OU dans bash :
&> /dev/null
Vous pouvez le faire pour tous les programmes engendrés par votre script en utilisant exec
avec la redirection au début de votre script.
exec > /dev/null 2>&1
A moins que les programmes que vous invoquez dans votre script accèdent directement au terminal (rare), cela devrait vous couvrir.
Une remarque sur les redirections : L'ordre est important. Il doit être > /dev/null 2>&1
, PAS 2>&1 >/dev/null
. J'avais l'habitude de penser que la dernière solution fonctionnerait parce que >
ressemble à une flèche, ce qui me fait penser à des pointeurs (tout comme le mot "redirect"), et si je pointe stderr vers stdout et ensuite stdout vers /dev/null, alors les deux devraient pointer vers /dev/null. Or, ce n'est pas le cas. Les descripteurs de fichiers ne sont pas des pointeurs et il est plus utile de penser à >
comme une sorte d'affectation à un descripteur de fichier plutôt que de pointer. (En quelque sorte, parce que techniquement, un fd est juste un nombre et vous avez besoin de fonctions système comme dup2
pour ouvrir un fichier différent dans le même descripteur de fichier ; mais je pense que l'affectation est une bonne abstraction de haut niveau).