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?

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.


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

Você sabe por err &>| outque não funciona?
Sanghyun Lee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.