O motivo noclobber não é definido por padrão é tradição. Como uma questão de design da interface do usuário, é uma boa idéia fazer com que “crie este novo arquivo” a ação fácil e colocar um obstáculo extra na ação mais perigosa “criar um novo arquivo ou substituir um arquivo existente”. Portanto, noclobber é uma boa idéia ( > para criar um novo arquivo, >| para potencialmente sobrescrever um arquivo existente) e provavelmente teria sido o padrão se o shell tivesse sido projetado algumas décadas depois.
É altamente recomendável usar o seguinte no seu arquivo de inicialização do shell interativo ( .bashrc ou .zshrc ):
set -o noclobber
alias cp='cp -i'
alias mv='mv -i'
Em cada caso (redirecionamento, cópia, movimentação), o objetivo é adicionar um obstáculo extra quando a operação pode ter o efeito colateral de apagar alguns dados existentes, embora apagar os dados existentes não seja o objetivo principal da operação. Eu não coloco rm -i nesta lista porque apagar dados é o objetivo principal de rm .
Observe que noclobber e -i são redes de segurança . Se eles dispararem, você fez algo errado. Portanto, não os use como desculpa para não verificar o que está sobrescrevendo! O ponto é que você deveria ter verificado que o arquivo de saída não existe. Se você disser file exists: foo ou overwrite 'foo'? , isso significa que você cometeu um erro e deve se sentir mal e ser mais cuidadoso. Em particular, não tenha o hábito de dizer y se for solicitado a sobrescrever (sem dúvida, os aliases devem ser alias cp='yes n | cp -i' mv='yes n | mv -i' , mas pressionar Ctrl + C faz a saída parece melhor): se você quisesse sobrescrever, cancele o comando, mova ou remova o arquivo de saída e execute o comando novamente.
Também é importante não ter o hábito de acionar essas seguranças, porque, se o fizer, um dia você estará em uma máquina que não tem sua configuração e perderá dados porque as proteções que estava contando não estão lá.
noclobber só será definido para shells interativos, já que .bashrc ou .zshrc é lido apenas por shells interativos. É claro que você não deve alterar as opções do shell de uma maneira que afete os scripts, já que isso poderia quebrar esses scripts.