¿Cuál es la regla general para usar `> foo.txt` y `< foo.txt` por sí solos en bash y zsh?

¿Cuál es la regla general para usar `> foo.txt` y `< foo.txt` por sí solos en bash y zsh?

No son válidos en csh. ¿Cuál es la regla general para usarlos en bashy zsh?

Respuesta1

Con bash, las redirecciones sin un comando simplemente realizan las redirecciones y luego las cierran:

  • < foo.txtpor sí solo como una línea de comando abrirá el archivo foo.txtpara leerlo y luego lo cerrará.
  • > foo.txtabrirá el archivo foo.txtpara escribirlo, creándolo si es necesario y truncándolo, y luego lo cerrará. Manera rápida de vaciar un archivo.

Con zsh, las redirecciones sin ejecutar un comando NULLCMDo READNULLCMD.

  • READNULLCMD(o NULLCMD, si `READNULLCMD no está configurado) para redirecciones de stdin:

    % echo foo > foo.txt
    % READNULLCMD=nl
    % < foo.txt
         1  foo
    
  • NULLCMDpara redirecciones 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, Redirecciones sin comandopara detalles:

Cuando un comando simple consta de uno o más operadores de redirección y cero o más asignaciones de parámetros, pero ningún nombre de comando, zsh puede comportarse de varias maneras.

Si el parámetro NULLCMDno está configurado o la opción CSH_NULLCMDestá configurada, se produce un error. Este es elcshcomportamiento y CSH_NULLCMD se establece de forma predeterminada al emularcsh.

Si SH_NULLCMDse establece la opción, el incorporado :se inserta como un comando con las redirecciones dadas. Este es el valor predeterminado al emularshoksh.

De lo contrario, si se establece el parámetro NULLCMD, su valor se utilizará como un comando con las redirecciones dadas. Si se establecen ambos NULLCMDy READNULLCMD, entonces se usará el valor del último en lugar del primero cuando la redirección sea una entrada. El valor predeterminado NULLCMDes ' cat' y READNULLCMDes ' more'. De este modo

< file

muestra el contenido del archivo en la salida estándar, con paginación si se trata de una terminal. NULLCMDy READNULLCMDpuede referirse a funciones de Shell.

información relacionada