web-dev-qa-db-fra.com

Bash: Que signifie "> |" faire?

Je viens de voir cela écrit;

$ some-command >| /tmp/output.txt

Les tuyaux verticaux sont utilisés dans les redirections standard "canalisant" la sortie d'une commande à l'autre, est >| en fait complètement inutile car ce serait la même chose que juste > dans ce scénario?

152
jwbensley

Ce n'est pas inutile - c'est une forme spécialisée de la plaine > opérateur de redirection (et, peut-être confus, rien à voir avec les tuyaux). bash et la plupart des autres shells modernes ont une option noclobber, qui empêche la redirection d'écraser ou de détruire un fichier qui existe déjà. Par exemple, si noclobber est vrai et que le fichier /tmp/output.txt existe déjà, cela devrait échouer:

$ some-command > /tmp/output.txt

Cependant, vous pouvez explicitement remplacer le paramètre de noclobber par le >| opérateur de redirection - la redirection fonctionnera, même si noclobber est défini.

Vous pouvez savoir si noclobber est défini dans votre environnement actuel avec set -o.

Pour la note historique, l'option "noclobber" et ses fonctionnalités de contournement proviennent de csh (fin des années 70). ksh copié (début des années 80) mais utilisé >| au lieu de >!. POSIX a spécifié la syntaxe ksh (donc tous les shells POSIX, y compris bash, les nouveaux dérivés ash utilisés comme sh sur certains systèmes, le prennent en charge). Zsh prend en charge les deux syntaxes. Je ne pense pas qu'il ait été ajouté à une variante de Bourne Shell, mais je peux me tromper.

229
D_Bye