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