web-dev-qa-db-fra.com

Pourquoi le script suivant se supprime-t-il?

Si vous créez un fichier exécutable avec le contenu suivant et l'exécutez, il se supprimera.
Comment cela marche-t-il?

#!/bin/rm
84
user253751

Le noyau interprète la ligne commençant par #! et l'utilise pour exécuter le script, en passant le nom du script; donc cela finit par courir

/bin/rm scriptname

qui supprime le script. (Comme Stéphane Chazelassouligne , scriptname ici suffit pour trouver le script - si vous avez spécifié un chemin relatif ou absolu, qui est passé tel quel) , sinon le chemin trouvé dans PATH est ajouté, y compris éventuellement la chaîne emptry si votre PATH le contient et que le script se trouve dans le répertoire courant. Vous pouvez jouer avec un script echo - #!/bin/echo - pour voir comment cela fonctionne.)

Comme hobbs l'a souligné, cela signifie que votre script est en fait un script rm, pas un script bash - ce dernier commencerait par #!/bin/bash.

Voir Comment les programmes s'exécutent pour plus de détails sur la façon dont cela fonctionne sous Linux; les commentaires sur cet article donnent des détails sur d'autres plateformes. #! s'appelle un Shebang, vous trouverez beaucoup d'informations en recherchant ce terme (merci à Aaron pour la suggestion). Comme jlp l'a souligné, vous le trouverez également appelé "pound bang" ou "hash bang" (# est communément appelé "livre" - dans les pays qui n'utilisent pas £ - ou "hachage" et ! comme "coup"). Wikipedia a plus d'informations.

112
Stephen Kitt