Par exemple: J'extrais un fichier tar.bz2 avec tar -xvf au lieu de tar -xjvf:
tar -xvf file.tar.bz2
tar: invalid tar magic
et si redirection stderr
tar -xvf file.tar.bz2 2>/dev/null
ça marche.
Maintenant si j'utilise un tuyau
tar -xvf file.tar.bz2 | grep "something" 2>/dev/null
tar: invalid tar magic
Ici, si la première commande échoue, je ne peux pas supprimer l'erreur.
Y a-t-il un moyen de supprimer de cette façon
Voici quelques alternatives qui impliquent de rediriger STDERR de tar
et grep
:
Utiliser bash
grouper les commandes {}
:
{ tar -xvf file.tar.bz2 | grep "something" ;} 2>/dev/null
Utiliser un sous-shell ()
:
( tar -xvf file.tar.bz2 | grep "something" ) 2>/dev/null
Notez que si vous voulez rediriger STDERR d'un seul processus, mieux vaut utiliser réponse d'Oli .
Sur une note différente, si vous voulez grep
quelque chose à la fois sur le STDOUT et le STDERR de tar
utilisez:
tar -xvf file.tar.bz2 |& grep "something"
Cela entraînera également l'épuisement du STDERR de tar
.
Ceci est en réalité un raccourci pour:
tar -xvf file.tar.bz2 2>&1 | grep "something"
Le tube forme une clause séparée dans la commande pour que la redirection dans ...
tar -xvf file.tar.bz2 | grep "something" 2>/dev/null
... redirige le STDERR de grep
, pas tar
.
Pour résoudre ce problème, il suffit de réorganiser les éléments pour que votre redirection s'effectue avec votre commande tar
:
tar -xvf file.tar.bz2 2>/dev/null | grep "something"