Si crea un archivo ejecutable con el siguiente contenido y lo ejecuta, se eliminará solo.
¿Como funciona esto?
#!/bin/rm
shell-script
files
rm
executable
shebang
usuario253751
fuente
fuente
rm
, se trata de la#!
. La pregunta podría reformularse a cómo funciona cualquier script ejecutable con un#!
.Respuestas:
El núcleo interpreta la línea que comienza
#!
y la utiliza para ejecutar el script, pasando el nombre del script; así que esto termina corriendoque elimina el guión. (Como señala Stéphane Chazelas , aquí es suficiente para encontrar el script: si especificó una ruta relativa o absoluta, se pasa tal cual, de lo contrario, cualquier ruta que se encuentre está antepuesta, incluida posiblemente la cadena de entrada si contiene eso y el script está en el directorio actual. Puede jugar con un script de eco - para ver cómo funciona.
scriptname
PATH
PATH
#!/bin/echo
Como señaló Hobbs , esto significa que su script es en realidad un
rm
script, no unbash
script, este último comenzaría con#!/bin/bash
.Consulte Cómo se ejecutan los programas para obtener detalles sobre cómo funciona esto en Linux; Los comentarios sobre ese artículo dan detalles para otras plataformas.
#!
se llama shebang, encontrará mucha información buscando ese término (gracias a Aaron por la sugerencia). Como jlp señaló, también lo encontrará como "libra bang" o "hash bang" (#
comúnmente conocido como "libra" - en países que no usan£
- o "hash", y!
como "bang" ) Wikipedia tiene más información.fuente
rm
será la ruta al script, ese es el primer argumento para la llamada al sistema execve () realizada por el proceso. Por lo general, si ejecutó el script como./scriptname
, eso será./scriptname
y si lo invocó comoscriptname
,/path/to/scriptname
allí/path/to
será la entrada en la$PATH
que se encontró ese script. Por lo general, solo lo haráscriptname
si tiene la cadena vacía$PATH
y ha invocado el script comoscriptname
yscriptname
está en el directorio actual.