要在 unixy 环境中截断文件,您通常会使用:
$ > file
在 bash(也是破折号)中,文件被截断(或者如果它不存在则创建),然后提示返回。在 zsh 中,文件被截断/创建,但它挂起。您必须Ctrl-C
能够再次使用提示。
重定向非空输出没有问题:
zsh$ cat nonempty.file > file
zsh$
问题是:
这种行为是否预期?zsh错了吗?
我不是真正的 zsh 用户,但在 zsh 中似乎与在 bash> file
中相同。cat > file
要在 zsh 中创建新文件或截断它,请使用: > file
. 这也适用于 bash。
在 zsh 手册中找到了这个:
没有命令的重定向:
当一个简单的命令由一个或多个重定向运算符和零个或多个参数分配组成,但没有命令名称时,
zsh
可以以多种方式运行。如果
NULLCMD
未设置参数或设置了选项CSH_NULLCMD
,则会导致错误。这是csh
行为,CSH_NULLCMD
在模拟时默认设置csh
。如果设置了该选项
SH_NULLCMD
,则内置:
命令将作为具有给定重定向的命令插入。这是模拟sh
或时的默认值ksh
。否则,如果
NULLCMD
设置了参数,则其值将用作具有给定重定向的命令。 如果同时 设置NULLCMD
和READNULLCMD
,则当重定向是输入时,将使用后者的值而不是前者的值。 is和 for is的默认值NULLCMD
cat
。READNULLCMD
more
在我的系统上,默认值为:
$ echo $ZSH_VERSION
4.3.10
$ echo $NULLCMD
cat
$ echo $READNULLCMD
/usr/bin/pager
$