Como substituir a opção "noclobber" do bash?

17

A bash noclobberopção impede que alguém sobrescreva arquivos com redirecionamento. Mas às vezes eu realmente quero. cshtem uma opção semelhante e pode ser substituída colocando a !antes dos nomes dos arquivos. Existe alguma maneira de fazer isso bash?

vy32
fonte

Respostas:

19

Sim. Anexar |ao operador de redirecionamento para formar >|. Isso está no § 3.6.2 do Manual de Referência do Bash , qv

Se o operador de redirecionamento for '>' e a opção noclobber para o conjunto interno tiver sido ativada, o redirecionamento falhará se o arquivo cujo nome resultar da expansão da palavra existir e for um arquivo regular. Se o operador de redirecionamento for '> |' ou se o operador de redirecionamento for '>' e a opção noclobber não estiver ativada, o redirecionamento será tentado mesmo se o arquivo nomeado pela palavra existir.

Visite este tutorial sobre a opção noclobber . Pode ser de ajuda.

JdeBP
fonte
3

Use |("pipe") bash, em vez de !("bang"), como faria csh. Por exemplo:

echo done >| out

Note que se você deseja redirecionar stderrpara stdout e substituir noclobber, nem >|&nem &>|vai funcionar; use o formulário longo:

cmd-with-errors done >| out 2>&1
Turvalar
fonte
Você sabe por err &>| outque não funciona?
Sanghyun Lee