Právě jsem to viděl zapsán;
$ some-command >| /tmp/output.txt
Vertikální potrubí se používá ve standardních přesměrováních „piping“ výstup jednoho příkazu na druhý, je >|
ve skutečnosti úplně zbytečné, protože by to bylo stejné jako jen >
v tomto scénáři?
Není to zbytečné - je to specializovaná forma pláně >
přesměrovává operátora (a možná matoucí, co do činění s potrubím). bash
a většina dalších moderních prostředí má možnost noclobber
, která zabraňuje přesměrování přepsat nebo zničit soubor, který již existuje. Například pokud noclobber
je true a soubor /tmp/output.txt
již existuje, pak by to mělo selhat:
$ some-command > /tmp/output.txt
Nastavení noclobber
však můžete explicitně přepsat pomocí >|
operátor přesměrování - přesměrování bude fungovat, i když je nastaveno noclobber
.
Můžete zjistit, zda je noclobber
nastaveno ve vašem aktuálním prostředí pomocí set -o
.
Pro historickou poznámku jak možnost „noclobber“, tak její funkce obejít pocházejí z csh
(pozdní 70. léta). ksh
zkopíroval (začátkem 80. let), ale použil >|
namísto >!
. POSIX specifikoval syntaxi ksh
(takže ji podporují všechny shelly POSIX včetně bash, novější deriváty popela používané jako sh na některých systémech). Zsh podporuje obě syntaxe. Nemyslím si, že byl přidán do jakékoli varianty Bourne Shell, ale možná se mýlím.