Bash: que fait "> |"?

148

Je viens de voir ceci écrit;

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

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

Jwbensley
la source

Réponses:

220

Ce n'est pas inutile - c'est une forme spécialisée de l' >opérateur de redirection en clair (et, ce qui prête à confusion, rien à voir avec les pipes). bashet la plupart des autres shells modernes ont une option noclobberqui empêche la redirection d’écraser ou de détruire un fichier déjà existant. Par exemple, si noclobberest vrai et que le fichier /tmp/output.txtexiste déjà, alors ceci devrait échouer:

$ some-command > /tmp/output.txt

Cependant, vous pouvez explicitement remplacer le paramètre de noclobberavec l' >|opérateur de redirection - la redirection fonctionnera même si noclobberest définie.

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

Pour la note historique, l’option "noclobber" et ses fonctions de contournement viennent de csh(fin des années 70). kshcopié (début des années 80) mais utilisé à la >|place de >!. POSIX a spécifié la kshsyntaxe (ainsi, tous les shells POSIX, y compris bash, les nouveaux dérivés de cendres utilisés comme sh sur certains systèmes, le prennent en charge). Zsh supporte les deux syntaxes. Je ne pense pas qu'il ait été ajouté à une variante du shell Bourne mais je me trompe peut-être.

D_Bye
la source
3
@sch - Votre note historique (merci pour l'info supplémentaire, d'ailleurs) - FreeBSD sha noclobber, depuis mai 2002 environ.
D_Bye