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,
zshcan behave in several ways.If the parameter
NULLCMDis not set or the optionCSH_NULLCMDis set, an error is caused. This is thecshbehavior andCSH_NULLCMDis set by default when emulatingcsh.If the option
SH_NULLCMDis set, the builtin:is inserted as a command with the given redirections. This is the default when emulatingshorksh.Otherwise, if the parameter
NULLCMDis set, its value will be used as a command with the given redirections. If bothNULLCMDandREADNULLCMDare set, then the value of the latter will be used instead of that of the former when the redirection is an input. The default forNULLCMDiscatand forREADNULLCMDismore.
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