Under Unix, if the first two bytes of an executable file are "#!", the kernel treats the file as a script rather than a machine code program. The word following the "!" (i.e., everything up to the first whitespace) is used as the pathname of the interpreter. For example, if the first line of an executable is
the script will be treated as a Perl script and passed as an argument to /usr/local/bin/perl to be interpreted. Some variants of Unix also allow one or more parameters to be passed to the interpreter, for example, you can write
and the script will be started as if you typed
on the command line. Also, most modern kernels ignore any whitespace between the "!" and the interpreter pathname. Even some modern kernels have fairly small limits (e.g. 32) on the length of line they will accept, making long pathnames and arguments somewhat unportable.