
Estaba jugando en la terminal de Red Hat Linux, y cuando escribí el asterisco ( *
) seguido de retorno, ejecuté uno de los programas en mi directorio. ¿Por qué?
Mi mejor suposición es que Unix lo trató como un comodín por lo que ejecutó el primer programa alfabético. Dado que my_program.exe
y one_of_my_programs.program
se puede ejecutar simplemente escribiendo el nombre del archivo, el operador comodín representa todos los archivos posibles. Como un programa aparece primero en orden alfabético, Unix lo ejecuta. ¿Es este un juicio correcto?
Respuesta1
Tu interpretación es correcta. El resto de los archivos se presentarán como su lista de parámetros.
Tenga en cuenta que hará esto sólo si el programa tiene el bit ejecutable configurado y el directorio actual está en la PATH
lista.
Un par de notas que pueden ayudar a comprender: -
- Si escribe
./*
, laPATH
entrada no es un requisito. - Si escribe
. *
o. ./*
y el primer archivo coincidente es un script, entonces no es necesario que sea ejecutable ni que el directorio actual esté enPATH
(puede que no sea cierto para shells distintos debash
).
Respuesta2
Esto sugiere que .
es parte de su PATH
variable. Esa es una muy mala idea por razones de seguridad (naturalmente, Windows tuvo que convertirlo en un valor predeterminado no modificable).
Sin embargo, esta "sugerencia" sólo es parcialmente válida: si tiene un archivo nombrado rm
en su directorio actual, *
estará bien ejecutando elpor defecto rm
:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
Como puede ver, no fue rm
en el directorio actual (un archivo vacío y no ejecutable) donde se ejecutó sino en el directorio predeterminado del sistema /bin/rm
.
Siempre verifique sus comandos cuando haya comodines involucrados. Aquí está uno de los mensajes más aterradores jamás leídos:
rm: cannot remove '.o': No such file or directory
Este es el resultado de llamar
rm * .o
, más o menos la peor ubicación de un espacio espurio que uno pueda imaginar.