Shebang #! in Linux Scripts
1. Introduction
When you write scripts in Linux you have to know the meaning of the first line from a bash script and why you need it. In a non-computer science environment phrase “the whole shebang” means “everything”.
In computer science, a shebang is a sequence of characters. The first character is a number sign (#) and the second is an exclamation mark (!). This is also known as sharp-exclamation, sha-bang, hashbang, pund-bang, or hash ping.
2. Why do we use the shebang?
The first line from a file is an executable in the Unix operating system. The program loader parser will know that the first line will be interpreted as a directive. The loader will execute the specified interpreter program set in the first shebang line and as a first parameter will pass the path of the initial script. That program may use the file as input data. So basically the shebang line is a way to declare what interpreter the operating system will use to parse the script file.
E.g: We have a script test.sh
and the first line is #!/bin/sh
then the program loader will know to run the program /bin/sh
and pass the test.sh
as a first argument.
The syntax of the shebang is:
#!<path to interpreter> [optional-arg]
For more information about the shebang concept, you can check out here.
3. Using shebang in a Shell Script
To use the shebang in your Linux scripts you have just to add it in the first line, the path to the interpreter, and an optional argument if you need it.
4. Using /usr/bin/env program
The env from the shebang will instruct the system to look for the specified interpreter. It will look in the $PATH variable and get the first occurrence. The default location for Unix-based systems is: /usr/bin/env
. To verify its location you can type: which env
the returned output is: /usr/bin/env
. The env path is in the same location on different operating systems.
As we can see on the below output the SHELL interpreter is located in the environment properties.
The advantage of using shebang line /usr/bin/env
is that you can port your script across different UNIX-like operating systems. Different interpreters can be in different locations on different UNIX operating systems.
5. Conclusion
For Sysadmins, Linux developers, and other people that have interaction with Linux Scripts it is important knowing the meaning and the role of that line in order to have a deep knowledge of the script concepts.
In this article, we introduce the concept of shebang, the usage of that line, and some examples of how to use it in the shell scripts of other interpreters.