Bash: O que faz "> |"?

148

Acabei de ver isso escrito;

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

Tubos verticais são usados ​​em redirecionamentos padrão "canalizando" a saída de um comando para outro, é >|de fato completamente inútil, pois seria o mesmo que apenas >neste cenário?

jwbensley
fonte

Respostas:

220

Não é inútil - é uma forma especializada do >operador de redirecionamento simples (e, talvez confuso, nada a ver com pipes). bashe a maioria dos outros shells modernos tem uma opção noclobber, que impede o redirecionamento de sobrescrever ou destruir um arquivo que já existe. Por exemplo, se noclobberfor verdadeiro e o arquivo /tmp/output.txtjá existir, isso deverá falhar:

$ some-command > /tmp/output.txt

No entanto, você pode substituir explicitamente a configuração noclobberpelo >|operador de redirecionamento - o redirecionamento funcionará, mesmo que noclobberesteja definido.

Você pode descobrir se noclobberestá definido em seu ambiente atual com set -o.

Para a nota histórica, a opção "noclobber" e seus recursos de derivação vêm do csh(final dos anos 70). kshcopiado (início dos anos 80), mas usado em >|vez de >!. O POSIX especificou a kshsintaxe (portanto, todos os shells POSIX, incluindo bash, derivados de cinzas mais recentes usados ​​como sh em alguns sistemas, o suportam). O Zsh suporta as duas sintaxes. Eu não acho que foi adicionado a qualquer variante Bourne shell, mas posso estar errado.

D_Bye
fonte
3
@sch - re sua nota histórica (obrigado pela informação adicional, btw) - FreeBSD do shtem noclobber, uma vez que cerca de Maio de 2002.
D_Bye