Blah. É tão simples quanto
$ set +C
Claro que encontro a resposta imediatamente depois de postar a pergunta.
As páginas man realmente não mencionam a diferença entre + e - .
Isso funciona como esperado
$ echo "foo" > foo
$ cat foo # foo
$ echo "updated" > foo
$ cat foo # updated
De man set
-C If set, bash does not overwrite an existing file with the
>, >&, and <> redirection operators. This may be overridden
when creating output files by using the redirection operator
>| instead of >.
Ok, então vamos set -C
$ set -C
$ echo "bar" > bar
$ cat bar # bar
$ echo "updated" > bar
file exists: bar
Tudo isso é bom, mas agora é hora de desativar set -C .
Como desativo o set -C depois que ele é ligado?
Eu tentei:
$ unset -C
zsh: bad option: -C
Blah. É tão simples quanto
$ set +C
Claro que encontro a resposta imediatamente depois de postar a pergunta.
As páginas man realmente não mencionam a diferença entre + e - .
Parece que você está usando o Z shell , mas cite a página do manual bash .
Só para esclarecer, os comandos set -C e set +C também funcionam em zsh, mas mais facilmente memorizar são as opções de shell IMHO :
setopt no_clobber
Isso é equivalente a set -C . E, para desabilitar essa opção, existe de fato um unsetopt builtin:
unsetopt no_clobber
Todas as opções são listadas com man zshoptions . As opções são simétricas, portanto, setopt no_clobber é equivalente a unsetopt clobber . É por isso que, na man page, a opção CLOBBER é explicada:
CLOBBER (+C, ksh: +C)
Allows
>redirection to truncate existing files, and>>to create files. Otherwise>!or>|must be used to truncate a file, and>>!or>>|to create a file.
Uma opção relacionada (IMHO muito útil) é
HIST_ALLOW_CLOBBER
Add
|to output redirections in the history. This allows history references to clobber files even when CLOBBER is unset.
Demo:
zsh$ setopt no_clobber hist_allowclobber zsh$ echo foo > baz zsh$ echo bar > baz zsh: file exists: baz zsh$ [Arrow UP] zsh$ echo bar >| baz zsh$
E, como última observação, as opções não diferenciam maiúsculas de minúsculas e os sublinhados são ignorados, por isso NOCLOBBER , NO_clobber , noclobber são tratados da mesma maneira.
Tags command-line zsh unix