How do I unset (undo) unix set -C in zsh?
Solution 1
Blah. It's as simple as
$ set +C
Of course I find the answer immediately after posting the question.
The man pages don't really mention the difference between +
and -
.
Solution 2
It seems you are using the Z shell, but quote the bash man page.
Just to clarify, the set -C
and set +C
commands work also in zsh, but more easily to memorize are IMHO shell options:
setopt no_clobber
This is equivalent to set -C
. And, to disable this option, there is indeed a unsetopt
builtin:
unsetopt no_clobber
All options are listed with man zshoptions
. Options are kind of symmetric, so setopt no_clobber
is equivalent to unsetopt clobber
. That's why, in the man page the CLOBBER option is explained:
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.
A related option (IMHO very handy) is
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$
And as a last remark, options are case-insensitive and underscores are ignored, hence NOCLOBBER
, NO_clobber
, noclobber
are treated the same way.
Related videos on Youtube
Thank you
Updated on September 18, 2022Comments
-
Thank you over 1 year
This works as expected
$ echo "foo" > foo $ cat foo # foo $ echo "updated" > foo $ cat foo # updated
From
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, so let's
set -C
$ set -C $ echo "bar" > bar $ cat bar # bar $ echo "updated" > bar file exists: bar
This is all well and good, but now it's time to turn off
set -C
.How do i disable
set -C
after it's been turned on?
I've tried:
$ unset -C zsh: bad option: -C