Shebangs: Scripting Made Easier
Shebang? Hashbang? Wot Bang?

I code.
Shebang?
Shebang, also known as Hashbang is a combination of characters #!. It specifies which interpreter is supposed to run the script.
Shebangs are always supposed to be at the top of the script.
They are helpful when scripting.
How to write a shebang?
To write a shebang, firstly we type #! followed by the path of the interpreter. For example, for sh we would write it as
#! /bin/sh
and for Python we'd write it as
#! /usr/bin/python
Where is my x interpreter located?
We can find the path of our binary by using which command.
which usage
$ which programname
For example, for python we'd do:
$ which python
/usr/bin/python
This gives the path of python in my computer, it may be different in your computer.
How does it actually work?
To know how it works, let's first create a simple script name.sh
echo -n "Enter your name: "
read name
echo "My name is $name"
All this script does is, reads input, and echoes it.
To run it, we simply do
$ bash ./name.sh
Enter your name: Raahim
My name is Raahim
Notice how we run the file with bash? What if we didn't want to type bash everytime we wanted to run the file. That's where shebangs come in handy. Let's add one to our file
#! /bin/bash
echo -n "Enter your name: "
read name
echo "My name is $name"
Now to run the file, we'd do
$ ./name.sh
bash: ./name.sh: Permission denied
Unfortunately, we get a permissions error. Nothing to panic about though, it's as expected. Let's take a look at our file's permissions.
$ ls -l name.sh
-rw-r--r-- 1 raahim raahim 75 Jul 30 17:08 name.sh
-rw-r--r-- these are the permissions of our file. r means read, w means write and x means execute. We need x to be able to run our file. Let's change that
$ chmod +x name.sh
$ ls -l name.sh
-rwxr-xr-x 1 raahim raahim 75 Jul 30 17:08 name.sh
Let's try to run our file again
$ ./name.sh
Enter your name: Raahim
My name is Raahim
Voila!
How to avoid shebang?
Sometimes, maybe we want to run a file with a different interpreter. For example, maybe we want to run a script with zsh instead of bash.
Specifying an interpreter explicitly ignores the shebang. For example to run our name.sh file with zsh we'd just do
$ zsh ./name.sh
Conclusion
- Shebangs are also known as hashbangs
- Shebangs are used to specify interpreters of the script
- Shebangs start with
#! - To make shebangs work, the path needs to point to an executable and the file needs to have execute permissions
whichcan be used to find path of our binary/executablechmod +x filenamecan be used to add execute permissions to the file./filenameto run the file


