The task is to programmatically obtain the name used to invoke the program. (For example determine whether the user ran "python hello.py", or "python hellocaller.py", a program importing the code from "hello.py".)

Sometimes a multiline shebang is necessary in order to provide the script name to a language's internal ARGV.

See also Command-line arguments

Examples from GitHub.

:;exec emacs -batch -l $0 -f main $*
 
;;; Shebang from John Swaby
;;; http://www.emacswiki.org/emacs/EmacsScripts
 
(defun main ()
  (let ((program (nth 2 command-line-args)))
    (message "Program: %s" program)))