Bash: O que o “|” faz?

142

Acabei de ver isso escrito;

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

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

    
por jwbensley 10.08.2012 / 11:51

1 resposta

210

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.

    
por 10.08.2012 / 12:23