In a script you must include a #!
on the first line followed by the path to the program that will execute the script (e.g.: sh, perl).
As far as I know, the #
character denotes the start of a comment and that line is supposed to be ignored by the program executing the script. It would seem, that this first line is at some point read by something in order for the script to be executed by the proper program.
Could somebody please shed more light on the workings of the #!
?
I'm really curious about this, so the more in-depth the answer the better.
Recommended reading:
The unix kernel's program loader is responsible for doing this. When exec()
is called, it asks the kernel to load the program from the file at its argument. It will then check the first 16 bits of the file to see what executable format it has. If it finds that these bits are #!
it will use the rest of the first line of the file to find which program it should launch, and it provides the name of the file it was trying to launch (the script) as the last argument to the interpreter program.
The interpreter then runs as normal, and treats the #!
as a comment line.