Sé cómo *
se interpreta en comandos como ls
por ejemplo. Pero al intentar ejecutar *
como comando, el shell intenta ejecutar el primer archivo o directorio en su directorio de trabajo. ¿Por qué es esto? ¿Cómo entiende el shell *
?
Respuesta aceptada:
A diferencia de otros sistemas operativos, en Unixes, es el shell el que expande los comodines de nombre de archivo. Expande las expansiones de parámetros y los globos primero, luego usa la primera palabra (ahora) como el nombre para ejecutar el comando.
Esta es también la razón por la cual los archivos nombrados con un guión inicial pueden ser problemáticos:un globo como *
se expandirá a los nombres de los archivos, y se puede tomar como opción un nombre que comience con un guión. (El ejemplo aterrador es que un archivo llamado -r
en el directorio de trabajo haría rm *
eliminar todo recursivamente...)
Por lo general, uno no usaría *
como el primer elemento en cualquier línea de comando, por lo que es poco probable que el hecho de que el primer archivo determine el comando que se ejecutará en ese caso cause problemas.