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.

#import <Foundation/Foundation.h>
 
int main(int argc, char **argv) {
	@autoreleasepool {
 
		char *program = argv[0];
		printf("Program: %s\n", program);
 
		// Alternatively:
		NSString *program2 = [[NSProcessInfo processInfo] processName];
		NSLog(@"Program: %@\n", program2);
 
	}
 
	return 0;
}