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.

// version 1.0.6
 
// 'progname.kt' packaged as 'progname.jar'
 
fun main(args: Array<String>) {
    println(System.getProperty("sun.java.command"))  // may not exist on all JVMs
    println(System.getProperty("java.vm.name")) 
}