Não é inútil - é uma forma especializada do operador de redirecionamento >
simples (e, talvez confusamente, nada a ver com pipes). bash
e a maioria dos outros shells modernos têm uma opção noclobber
, que impede o redirecionamento de sobrescrever ou destruir um arquivo que já existe. Por exemplo, se noclobber
for true e o arquivo /tmp/output.txt
já existir, isso deverá falhar:
$ some-command > /tmp/output.txt
No entanto, você pode substituir explicitamente a configuração de noclobber
pelo operador de redirecionamento >|
- o redirecionamento funcionará, mesmo se noclobber
estiver definido.
Você pode descobrir se noclobber
está definido no seu ambiente atual com set -o
.
Para a observação histórica, a opção "noclobber" e seus recursos de bypass vêm de csh
(final dos anos 70). ksh
copiou (início dos anos 80), mas usou >|
em vez de >!
. POSIX especificou a sintaxe ksh
(para que todos os shells POSIX incluindo bash, novos derivados de cinza usados como sh em alguns sistemas suportam). Zsh suporta ambas as sintaxes. Eu não acho que foi adicionado a qualquer variante de shell Bourne, mas eu posso estar errado.