about 3 years ago

几乎每一本 Linux / Shell 入门的书中都会讲到如何新建一个空文件,那就是 touch 命令:

touch file_name

实际上在 bash 中有更高效的方法(其实就是少敲 4 个字符,?):

> file_name

但是,如果在 zsh 中尝试执行以上命令,会发现 zsh 陷入到一个进程中不会退出,直到按 Ctrl-d为止。这是因为在 zsh 中执行一个只有IO重定向而没有命令名字的 command line 时,zsh 会使用变量 NULLCMD 的值作为这个 command line 的命令名字,而 NULLCMD 的默认值为:cat,就是说当在 zsh 中执行 > file_name 时,实际上执行的是 cat > file_name,如果要获得和 bash 中一样的体验,可以将 NULLCMD 的值修改为 :

export NULLCMD=:

可以将以上代码加入到 zsh 配置文件中。

类似的,当在 zsh 中执行 < file_name 这条命令的时候,zsh 会使用变量 READNULLCMD 的值作为这行 command line 的命令名字, READNULLCMD 的默认值为:more

PS:

  1. touch 命令

实际上 touch命令的主要功能并不是用来创建一个新的空文件。它的手册(man 1 touch)中的说明是:

change file access and modification times

  1. : 命令

是的,: 是一个命令的名字,bash 和 zsh 都内建了这个命令,它的功能非常简单,就是:什么都不做,退出状态码为 0。

← zsh 你不知道那些事儿-002-INTERACTIVE_COMMENTS 让 HTTPie 使用 Google Chrome 中的 Cookies →
 
comments powered by Disqus