A script without a
#! (the so called shebang) in the very first line of the script is run
by the “Bourne Shell”. To change the interpreter of the script you use the
#!. Most often in scripts you will see that, it’s still
#! /bin/sh though.
#!/bin/sh echo "I am in the Bourne shell (maybe)"
That a Bourne compatible shell is reachable via
/bin/sh is by
convention, meaning that a system, where this is not the case, could be
The Bourne Shell sh would be my ideal scripting environment, as it’s
ubiquitous and can do everything that I need. There is just one snag. It’s
very weak on string processing. In fact for most string manipulation tasks you
need to rely on external tools like
This makes the Bourne Shell just too slow. So in comes…
The bash has good string manipulation routines. It’s not the speediest kid on the block, but it gets the job done. And it’s everywhere.
Unfortunately unlike sh, bash is not placed into
/bin on every platform.
So to get to the location of bash on the current system, without having
to change the scripts for every install, one can use the useful
command, that searches the environment variable
PATH for a command and then
#!/usr/bin/env bash echo "Now I am in bash!"
How dependable is the absolute path
/usr/bin/envthough ? Is it guaranteed by POSIX ? I don’t know. But so far this never failed me.
#! /bin/bashthough has and also
#! /usr/bin/bash. So this is a step forward.