Homepage › Forums › Articles › Files and Filetypes › List of Shebang Interpreter Directives
Tagged: directive, hashbang, hashpling, interpreter, pound-bang, scripting, shebang
This topic was published by DevynCJohnson and viewed 2526 times since "". The last page revision was "".
- AuthorPosts
The hashpling is the first line of a script, and it begins with "#!". When a script is executed, the program-loader will read the first line and see the hashpling. Then, the program-loader will pass the script to the specified interpreter in the hashpling. Once the interpreter receives the script, the script will be read and executed. The interpreter itself views the hashpling as it would any other comment. The hashpling only has importance to the program-loader or any software that checks magic numbers. The Magic Number for hashplings is "0x23 0x21" which is the ASCII characters "#!" in hexadecimal form.
Some scripting languages have more than one possible hashpling. The variations is due to multiple factors such as
- the script interpreters being in different locations
- the use of the portable "#!/usr/bin/env" hashpling
- parameters in the hashpling
FUN FACT:
#!path arg
translates to the syscallexecve("path", ["path", "arg"], env);
.#!/usr/bin/env ARG
is a portable hashpling.Below is a list of hashplings recognized and used by various scripting languages and interpreters. The list may not be complete, and some of th listed hashplings may not work on some Unixoid systems.
NOTE: Any text after a "#//" is a comment of mine to explain the hashpling.
- ASH - #!/bin/ash
- awk - #!/usr/bin/awk -f
- BASH -
- #!/bin/bash
- #!/usr/bin/env bash
- Busybox - #!/bin/busybox sh
- csh -
- #!/bin/csh
- #!/bin/csh -f
- Groovy -
- #!/usr/local/bin/groovy
- #!/usr/bin/env groovy
- JavaScript -
- #!/usr/bin/env jsc
- #!/usr/bin/env node
- #!/usr/bin/env rhino
- Lisp - #!/usr/local/bin/sbcl --script #//Steel Bank Common Lisp
- Lua -
- #!/usr/bin/env lua
- #!/usr/bin/lua
- make - #!/usr/bin/make -f
- Perl -
- #!/usr/bin/env perl
- #!/usr/bin/perl
- #!/usr/bin/perl -T #//taint checks
- PHP -
- #!/usr/bin/php
- #!/usr/bin/env php
- Python - #!/usr/bin/env python
- Python3 - #!/usr/bin/env python3
- Python3.4 - #!/usr/bin/env python3.4
- Ruby -
- #!/usr/bin/env ruby
- #!/usr/bin/ruby
- sed -
- #!/bin/sed -f
- #!/usr/bin/sed -f
- #!/usr/bin/env sed
- Shell (POSIX Shell) - #!/bin/sh
- Solaris POSIX Shell - #!/usr/xpg4/bin/sh
- Tcsh - #!/bin/tcsh
FUN FACT: OpenServer and Unicos are two examples of systems that store "env" under /bin/ rather than the usual /usr/bin/. On such systems, the admins should create a soft-link, or the program's installation script should create one.
Further Reading
- Hashplings - https://dcjtech.info/topic/hashplings/
- Types of Linux Executables - https://dcjtech.info/topic/types-of-linux-executables/
- AuthorPosts