J'ai essayé toutes sortes de façons de rediriger les deux stdout
et stderr
à /dev/null
sans aucun succès. J'ai presque toute ma vie couru bash que 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, les messages d'erreur de ls seront mis en sourdine. Cependant, si python.tgz
est présent, une ligne avec être 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.
la source
/bin/sh
ont implémenté la&>/dev/null
syntaxe, apparemment pas ou si j'ai une version plus ancienne (que je ne peux en aucun cassh
est basé sur pdksh. Il n'y a plus de Bourne shell aujourd'hui.csh
introduit>&
aussi disponible enzsh
.bash
choisi&>
(maintenant également pris en charge parzsh
et certainspdksh
dérivés) bien que cela casse clairement la conformité POSIX car safoo &> file
syntaxe POSIX est parfaitement valide, ce qui signifie quelque chose de complètement différent.foo &> file
est commefoo & > file
oufoo & : > file
, c'est-à-dire qu'il tourne en arrière-plan et ouvre un fichier en écriture sans commande du tout (il est peu probable qu'il soit utilisé comme ça).>&
n'est pas idéale soit comme il est en conflit avec les>&2
,>&-
opérateurs.zsh
l'a ajouté pour plus de commodité pour les utilisateurs de csh (csh n'en a pas>&2
). Ce ne sont que des sucres syntaxiques, il suffit d’utiliser> file 2>&1
ce qui est standard et portable (à des coquilles de type Bourne).