- A função do shebang é:
Interpreter directives allow scripts and data files to be used as commands, hiding the details of their implementation from users and other programs, by removing the need to prefix scripts with their interpreter on the command line.
- Qual é a diferença entre executar um arquivo usando ./file ou sh file?
A Bourne shell script that is identified by the path some/path/to/foo, has the initial line,
#!/bin/sh -x
and is executed with parameters bar and baz as
some/path/to/foo bar baz
provides a similar result as having actually executed the following command line instead:
/bin/sh -x some/path/to/foo bar baz
Note: On 1980 Dennis Ritchie introduced kernel support for interpreter directives:
The system has been changed so that if a file being executed begins with the magic characters #! , the rest of the line is understood to be the name of an interpreter for the executed file. Previously (and in fact still) the shell did much of this job; it automatically executed itself on a text file with executable mode when the text file's name was typed as a command. Putting the facility into the system gives the following benefits. 1) It makes shell scripts more like real executable files, because they can be the subject of 'exec.' 2) If you do a 'ps' while such a command is running, its real name appears instead of 'sh'. Likewise, accounting is done on the basis of the real name. 3) Shell scripts can be set-user-ID.
Note: Linux ignores the setuid bit on all interpreted executables (i.e. executables starting with a #! line).
4) It is simpler to have alternate shells available; e.g. if you like the Berkeley csh there is no question about which shell is to interpret a file. 5) It will allow other interpreters to fit in more smoothly.
Mais informações: