10

要在 unixy 环境中截断文件,您通常会使用:

$ > file

在 bash(也是破折号)中,文件被截断(或者如果它不存在则创建),然后提示返回。在 zsh 中,文件被截断/创建,但它挂起。您必须Ctrl-C能够再次使用提示。

重定向非空输出没有问题:

zsh$ cat nonempty.file > file
zsh$

问题是:

这种行为是否预期?zsh错了吗?

4

1 回答 1

15

我不是真正的 zsh 用户,但在 zsh 中似乎与在 bash> file中相同。cat > file要在 zsh 中创建新文件或截断它,请使用: > file. 这也适用于 bash。


更新:

在 zsh 手册中找到了这个:

没有命令的重定向:

当一个简单的命令由一个或多个重定向运算符和零个或多个参数分配组成,但没有命令名称时, zsh可以以多种方式运行。

如果NULLCMD未设置参数或设置了选项CSH_NULLCMD,则会导致错误。这是 csh 行为,CSH_NULLCMD在模拟时默认设置csh

如果设置了该选项SH_NULLCMD,则内置:命令将作为具有给定重定向的命令插入。这是模拟sh或时的默认值ksh

否则,如果NULLCMD设置了参数,则其值将用作具有给定重定向的命令。 如果同时 设置NULLCMDREADNULLCMD,则当重定向是输入时,将使用后者的值而不是前者的值。 is和 for is的默认值NULLCMDcatREADNULLCMDmore

在我的系统上,默认值为:

$ echo $ZSH_VERSION
4.3.10
$ echo $NULLCMD
cat
$ echo $READNULLCMD
/usr/bin/pager
$
于 2013-03-21T11:59:49.150 回答