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.

$ include "seed7_05.s7i";
 
const proc: main is func
  local
    var integer: i is 0;
  begin
    writeln("Program path:      " <& path(PROGRAM));
    writeln("Program directory: " <& dir(PROGRAM));
    writeln("Program file:      " <& file(PROGRAM));
  end func;