Today I Learned: Linux script shebang
Brendan Thompson • 1 June 2021
Now, this TIL is also rather an old one, I would say this goes all the way back into the early days of my career in the IT industry. However, today I needed to look into shebang lines again which is why I thought it would be a good idea to write this little TIL.
The shebang line at the top of a script allows the script to automatically invoke the defined
interpreter. In a lot of cases this is just bash
or sh
, however, it is absolutely not limited to
this. Some other commons ones that are used are python
, swift
, perl
.
For the sake of ease I will use bash
in any examples, however all examples should be applicable
to other interpreters.
The following is the most basic example, wherein you define the explicit path to where bash
is.
#!/bin/bash
echo "Hello, World"
This is pretty standard practice, however it does mean that the script is not super portable. If
you were to try an execute this script on another machine where bash
was installed to /usr/bin/
instead of /bin/
the script would fail to run. A way to fix this would be using env
to have the
script automatically find bash
.
#!/usr/bin/env bash
echo "Hello, World"
Now that the shebang is using env
the script can execute on any system where bash is installed.
In the specific case of bash
the operator is able to append --
to the end of the shebang which
ensures that no additional options that might be passed in will be processed.
#!/usr/bin/env bash --
echo "Hello, World"
env
shebang.