¿Cuál es la función del asterisco como comando independiente en Unix?

¿Cuál es la función del asterisco como comando independiente en Unix?

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.exey one_of_my_programs.programse 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 PATHlista.

Un par de notas que pueden ayudar a comprender: -

  • Si escribe ./*, la PATHentrada 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é en PATH(puede que no sea cierto para shells distintos de bash).

Respuesta2

Esto sugiere que .es parte de su PATHvariable. 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 rmen 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 rmen 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.

información relacionada