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?
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.