J'ai essayé toutes sortes de façons de rediriger à la fois stdout
et stderr
vers /dev/null
sans succès. J'ai presque toute ma vie couru bash avec lequel je n'ai jamais eu ce problème, mais pour une fois dans BSD, je suis coincé avec /bin/sh
.
Ce que j'ai essayé:
if ls ./python* 2> /dev/null; then
echo found Python
fi
... qui fonctionne; si Python n'est pas présent, il coupera les messages d'erreur de ls. Cependant, si python.tgz
est présent, une ligne avec une sortie qui ressemble à ceci:
# ./test.sh
./python-2.7.3p1.tgz
J'ai essayé:
if ls ./python* &> /dev/null; then
echo found Python
fi
et
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
et
if ls ./python* > /dev/null; then
echo found Python
fi
Rien ne fonctionne vraiment. Je ne peux que rediriger une des sorties, pas les deux en même temps.
Cela fonctionnera dans n'importe quel shell compatible Posix:
ls good bad >/dev/null 2>&1
Vous devez rediriger stdout d'abord avant de le dupliquer dans stderr ; si vous le dupliquez en premier, stderr indiquera simplement vers quoi stdout pointait initialement.
Bash , zsh et certains autres shells fournissent également le raccourci
ls good bad &>/dev/null
ce qui est pratique sur la ligne de commande mais doit être évité dans les scripts qui sont destinés à être portables.