Lorsque vous exécutez:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Vous redirigez essentiellement la sortie du flux 1 (c'est stdout
-à- dire ) vers /dev/null
.
C'est très bien lorsque vous souhaitez rediriger la sortie produite par l'exécution normale d'un programme. Cependant, si vous souhaitez également rediriger la sortie causée par toutes les erreurs, avertissements ou échecs, vous devez également rediriger le stderr
ou le flux d'erreur standard vers /dev/null
.
Une façon de procéder consiste à ajouter le numéro du flux que vous souhaitez rediriger à l'opérateur de redirection, >
comme ceci:Command 2> /dev/null
Par conséquent, votre commande ressemblerait à:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Mais notez que nous avons déjà redirigé un flux vers /dev/null
. Pourquoi ne pas simplement se greffer sur la même redirection? Bash nous permet de le faire en spécifiant le numéro de flux vers lequel rediriger. 2>&1
.
Remarquez le &
caractère après l'opérateur de redirection. Cela indique au shell que ce qui apparaît ensuite n'est pas un nom de fichier, mais un identifiant pour le flux de sortie.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Attention aux opérateurs de redirection, leur commande est très importante. Si vous deviez rediriger dans le mauvais ordre, vous vous retrouverez avec des résultats inattendus.
Vous pouvez également atteindre un silence complet en redirigeant tous les flux de sortie vers /dev/null
ce raccourci: &>/dev/null
(ou redirigez vers un fichier journal avec &>/path/to/file.log
).
Par conséquent, écrivez votre commande comme suit:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
c'est ça. Merci à tous pour l'aide instantanée!