Qual é a regra geral de usar `> foo.txt` e `< foo.txt` sozinhos no bash e zsh?

Qual é a regra geral de usar `> foo.txt` e `< foo.txt` sozinhos no bash e zsh?

Eles não são válidos em csh. Qual é a regra geral para usá-los em bashe zsh?

Responder1

Com o bash, os redirecionamentos sem comando apenas executam os redirecionamentos e depois fecham-nos:

  • < foo.txtpor si só como uma linha de comando abrirá o arquivo foo.txtpara leitura e depois o fechará.
  • > foo.txtirá abrir o arquivo foo.txtpara gravação, criando-o se necessário e truncando-o, e então fechá-lo. Maneira rápida de esvaziar um arquivo.

Com o zsh, os redirecionamentos sem um comando são executados NULLCMDou READNULLCMD.

  • READNULLCMD(ou NULLCMD, se `READNULLCMD não estiver definido) para redirecionamentos de stdin:

    % echo foo > foo.txt
    % READNULLCMD=nl
    % < foo.txt
         1  foo
    
  • NULLCMDpara redirecionamentos de 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
    

VerZsh 7.3, Redirecionamentos sem comandopara detalhes:

Quando um comando simples consiste em um ou mais operadores de redirecionamento e zero ou mais atribuições de parâmetros, mas nenhum nome de comando, o zsh pode se comportar de várias maneiras.

Se o parâmetro NULLCMDnão estiver definido ou a opção CSH_NULLCMDestiver definida, será causado um erro. Isto é ocshcomportamento e CSH_NULLCMD é definido por padrão ao emularcsh.

Se a opção SH_NULLCMDestiver definida, o builtin :é inserido como um comando com os redirecionamentos fornecidos. Este é o padrão ao emularehouksh.

Caso contrário, se o parâmetro NULLCMDestiver definido, seu valor será utilizado como comando com os redirecionamentos fornecidos. Se ambos NULLCMDe READNULLCMDestiverem definidos, então o valor do último será usado em vez do primeiro quando o redirecionamento for uma entrada. O padrão para NULLCMDé ' cat' e para READNULLCMDé ' more'. Por isso

< file

mostra o conteúdo do arquivo na saída padrão, com paginação se for um terminal. NULLCMDe READNULLCMDpode referir-se a funções shell.

informação relacionada