在 bash 和 zsh 中单独使用 `> foo.txt` 和 `< foo.txt` 的一般规则是什么?

non*_*ity 1 bash zsh io-redirection

它们在 中无效csh。在bashand中使用它们的一般规则是zsh什么?

mur*_*uru 5

使用 bash,没有命令的重定向只执行重定向然后关闭它们:

  • < foo.txt本身作为命令行将打开文件foo.txt进行读取,然后关闭它。
  • > foo.txt将打开文件foo.txt进行写入,必要时创建它并截断它,然后关闭它。清空文件的快速方法。

使用 zsh,无需命令即可重定向运行NULLCMDREADNULLCMD.

  • READNULLCMD(或者NULLCMD,如果 `READNULLCMD 未设置)用于标准输入的重定向:

    % echo foo > foo.txt
    % READNULLCMD=nl
    % < foo.txt
         1  foo
    
    Run Code Online (Sandbox Code Playgroud)
  • NULLCMD 对于标准输出的重定向:

    % NULLCMD='ls'
    % > foo.txt   # runs $NULLCMD
    % < foo.txt   # runs $READNULLCMD, showing the output of `NULLCMD` run previously
         1  Applications
         2  Desktop
         3  Documents
         4  Downloads
    
    Run Code Online (Sandbox Code Playgroud)

有关详细信息请参阅Zsh 7.3,无命令的重定向

当一个简单的命令包含一个或多个重定向运算符和零个或多个参数赋值,但没有命令名称时,zsh 可以以多种方式运行。

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

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

否则,如果NULLCMD设置了该参数,则其值将用作具有给定重定向的命令。如果同时NULLCMDREADNULLCMD被设置,然后后者的值将被用来代替前者的时重定向为输入。默认为NULLCMDcat”,默认为READNULLCMDmore”。因此

< file
Run Code Online (Sandbox Code Playgroud)

在标准输出上显示文件的内容,如果是终端则使用分页。NULLCMD并且READNULLCMD可以参考shell函数。