To truncate a file in a unixy environment you would commonly use:
$ > file
In bash (also dash), the file is truncated (or created if it doesn't exist), and then the prompt returns. In zsh, the file is truncated/created, but it hangs. You have to Ctrl-C
to be able to use the prompt again.
Redirecting non-empty output works without a problem:
zsh$ cat nonempty.file > file
zsh$
Is this behaviour expected or not? Is zsh wrong?
I'm not really a zsh user but seems like > file
in zsh is the same as cat > file
in bash. To create a new file or truncate it in zsh, use : > file
. This also works for bash.
Found this in zsh manual:
REDIRECTIONS WITH NO COMMAND:
When a simple command consists of one or more redirection operators and zero or more parameter assignments, but no command name,
zsh
can behave in several ways.If the parameter
NULLCMD
is not set or the optionCSH_NULLCMD
is set, an error is caused. This is thecsh
behavior andCSH_NULLCMD
is set by default when emulatingcsh
.If the option
SH_NULLCMD
is set, the builtin:
is inserted as a command with the given redirections. This is the default when emulatingsh
orksh
.Otherwise, if the parameter
NULLCMD
is set, its value will be used as a command with the given redirections. If bothNULLCMD
andREADNULLCMD
are set, then the value of the latter will be used instead of that of the former when the redirection is an input. The default forNULLCMD
iscat
and forREADNULLCMD
ismore
.
On my system, the default is:
$ echo $ZSH_VERSION
4.3.10
$ echo $NULLCMD
cat
$ echo $READNULLCMD
/usr/bin/pager
$
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With