Does bash and sh execute a script differently? I executed a shell script with both bash and sh, and got the same output. So what is the difference?
Also, when you just run ./executable
, does it use bash or sh?
bashshell
Does bash and sh execute a script differently? I executed a shell script with both bash and sh, and got the same output. So what is the difference?
Also, when you just run ./executable
, does it use bash or sh?
Best Answer
That depends on the system you are running. One many OSes, especially Linux based ones,
sh
is a link tobash
.In such case, there are still some differences in behavior where
bash
try to be more like traditional bourne shell when calledsh
, but it still accepts most bashisms.On some other OSes, like Debian based ones,
sh
is provided bydash
, notbash
. That makes a much bigger difference asdash
doesn't support bashisms, being designed to be a clean POSIX shell implementation.On proprietary OSes,
sh
is often either provided by a POSIX compliantksh88
which likedash
, doesn't implement bashisms. On Solaris 10 and older, depending on what your PATH is,sh
will likely be a legacy Bourne shell, predating POSIX.In any case, you likely got the same output with your test simply because your script was not using any
bash
specific command, option or syntax.When you run
./executable
, what shell will be run essentially depends on the shebang written at the beginning of the .executable script. That will bebash
if the shebang specifies it:If there is no shebang and you call the script from a POSIX compliant shell, the script should technically be executed by the first
sh
found in the PATH. Many shell interpreters likebash
,dash
andksh
are considering themselves to be POSIX so will interpret the script. Note that theSHELL
environment variable is not used here.