5 votos

Cómo hacer normal el comando `ls` y el comodín `*` en Zsh

Consideremos la interacción con Zsh en un Mac:

 % ls |grep gradle
gradle@7
 % ls gradle*
INSTALL_RECEIPT.json    LICENSE                 NOTICE                  README                  bin                     libexec

Según cada descripción de la funcionalidad del * comodín, la salida de la segunda invocación de ls debe ser el mismo que el primero. Sin embargo, muestra el contenido de la carpeta. ¿A qué se debe? ¿Cómo puedo arreglarlo para que * ¿se comporta normalmente?

Obviamente, además de buscarlo en Google (por favor, no me sugieras que busque la respuesta en Google), intenté leer man ls pero eso es completamente inmanejable.

13voto

siva Puntos 23

El shell expande el glob y los argumentos resultantes se pasan a ls como si las hubieras escrito completas.

  1. gradle* coincide una vez, en gradle@7 .
  2. ls gradle@7 se ejecuta.

Desde gradle@7 es un directorio, ls enumera los contenidos. Este es el comportamiento documentado de ls :

Para cada operando que nombra un fichero de un tipo distinto a directorio, ls muestra su nombre [ ].
Para cada operando que nombra un fichero de tipo directorio, ls muestra los nombres de los ficheros contenidos en ese directorio [ ].

fuente: ls man page

Los ejemplos de su enlace utilizan ficheros, por lo que los propios ficheros se imprimen.

ls tiene una opción para imprimir el propio directorio en lugar de su contenido.

-d Los directorios se listan como ficheros planos (no se buscan recursivamente).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X