Como faço para desfazer (desfazer) o conjunto unix -C em zsh?

1

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
    
por user633183 10.05.2014 / 21:34

2 respostas

3

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 - .

    
por 10.05.2014 / 21:39
2

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.

    
por 10.05.2014 / 23:55