Каково общее правило использования `> foo.txt` и `< foo.txt` по отдельности в bash и zsh?

Каково общее правило использования `> foo.txt` и `< foo.txt` по отдельности в bash и zsh?

Они недействительны в csh. Каково общее правило их использования в bashи zsh?

решение1

В bash перенаправления без команды просто выполняют перенаправления, а затем закрывают их:

  • < foo.txtсама по себе в виде командной строки откроет файл foo.txtдля чтения, а затем закроет его.
  • > foo.txtоткроет файл foo.txtдля записи, создав его при необходимости и обрезав, а затем закроет его. Быстрый способ очистить файл.

С zsh перенаправления без команды запускаются NULLCMDили READNULLCMD.

  • READNULLCMD(или NULLCMD, если `READNULLCMD не установлен) для перенаправления stdin:

    % echo foo > foo.txt
    % READNULLCMD=nl
    % < foo.txt
         1  foo
    
  • NULLCMDдля перенаправления stdout:

    % 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
    

ВидетьZsh 7.3, Перенаправления без командыдля получения подробной информации:

Когда простая команда состоит из одного или нескольких операторов перенаправления и нуля или более назначений параметров, но не содержит имени команды, zsh может вести себя несколькими способами.

Если параметр NULLCMDне задан или задана опция CSH_NULLCMD, возникает ошибка. Этоcshповедение и CSH_NULLCMD устанавливается по умолчанию при эмуляцииcsh.

Если опция SH_NULLCMDустановлена, встроенная команда :вставляется как команда с заданными перенаправлениями. Это значение по умолчанию при эмуляциишиликш.

В противном случае, если параметр NULLCMDустановлен, его значение будет использоваться как команда с заданными перенаправлениями. Если установлены оба NULLCMDи READNULLCMD, то значение последнего будет использоваться вместо значения первого, когда перенаправление является вводом. Значение по умолчанию для NULLCMD— ' cat', а для READNULLCMD— ' more'. Таким образом

< file

отображает содержимое файла на стандартном выводе с разбиением на страницы, если это терминал. NULLCMDи READNULLCMDможет относиться к функциям оболочки.

Связанный контент