Estaba jugando en la terminal en Red Hat Linux, y cuando escribí el asterisco ( *
) seguido de return, ejecuté uno de los programas en mi directorio. ¿Por qué?
Mi mejor conjetura es que Unix lo trató como un comodín, por lo que ejecutó el primer programa alfabético. Dado 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 es primero alfabéticamente, Unix lo ejecuta. ¿Es este un juicio correcto?
linux
command-line
bash
unix
usuario6086585
fuente
fuente
*
alfabéticamente, pero bash es uno que sí.Respuestas:
Tu interpretación es correcta. El resto de los archivos se presentarán como su lista de parámetros.
Tenga en cuenta que solo hará esto si el programa tiene el bit ejecutable establecido y el directorio actual está en la
PATH
lista.Un par de notas que pueden ayudar a comprender: -
./*
, laPATH
entrada no es un requisito.. *
o. ./*
y el primer archivo coincidente es un script, no es necesario que sea ejecutable ni que el directorio actual estéPATH
(puede que no sea cierto para shells que no seanbash
).fuente
PATH
con el mismo nombre que el primer archivo, se ejecutará este otro comando.mkdir foo; cd foo; touch rm xyz; ls; *; ls
.*
es un alias.. *
o. ./*
una latabash *
(o cualquier otro caparazón).Esto sugiere que
.
es parte de suPATH
variable. Esa es una muy mala idea por razones de seguridad (naturalmente, Windows tuvo que convertirla en un valor predeterminado no modificable).Sin embargo, esta "sugerencia" solo es ligeramente válida: si tiene un archivo nombrado
rm
en su directorio actual,*
estará bien ejecutando el predeterminadorm
:Como puede ver, no se
rm
ejecutó el directorio actual (un archivo vacío y no ejecutable) sino el valor predeterminado del sistema/bin/rm
.Siempre revise sus comandos cuando estén involucrados comodines. Este es uno de los mensajes más terroríficos que jamás haya leído:
Este es el resultado de llamar
, más o menos la peor ubicación de un espacio espurio que se pueda encontrar.
fuente
rm()
que se agregue-i
a los parámetros o verifique los parámetros y solicite confirmación si hay más de un número determinado.mv /tmp/ohno /tmp/ohnoes
( google.fr/search?q=ohnoes&source=lnms&tbm=isch )