The #! magic, details about the shebang/hash-bang mechanism - Johndescs's mini-recording
« C'est donc bien au niveau du noyau, au moment de l'exec, quand le noyau détermine le format binaire du fichier. Si le format n'est pas compris (un script sans shebang) c'est le shell qui réagit et essaye de l'interpréter lui-même (car exec* lui aura renvoyé un ENOEXEC). ».
Ooook. Le shell a recours à une fonction mise à disposition par le noyau (syscall) faisant partie de la famille exec*(). Exec détecte la succession des caractères '#' et '!'. Il tente alors de remplacer le code du processus (le shell qui l'a appelé) par celui de l'interpréteur désigné par le shebang. S'il n'y arrive pas (il ne le trouve pas (il n'y a pas de parcours du $PATH), ou ce n'est pas un binaire exécutable) alors exec() retourne en erreur. S'il n'y a pas de shebang, c'est le shell qui a lancé le exec() qui tentera d'interpréter le fichier puisque exec() retournera en NOEXEC (ce truc n'est pas exécutable).
March 12, 2016 at 9:56:30 PM UTC
- permalink
-
http://home.michalon.eu/shaarli/?_yVgsA