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.
scriptnamePATHPATH#!/bin/echoComo señaló Hobbs , esto significa que su script es en realidad un
rmscript, no unbashscript, 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
rmserá 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á./scriptnamey si lo invocó comoscriptname,/path/to/scriptnameallí/path/toserá la entrada en la$PATHque se encontró ese script. Por lo general, solo lo haráscriptnamesi tiene la cadena vacía$PATHy ha invocado el script comoscriptnameyscriptnameestá en el directorio actual.