Bash – How to find out whether a shell script is written in bash or sh

bashshellshell-script

How can I find out whether a script is written in bash or sh?

The first line of the script is not helpful here, since on Linux, bash scripts have this line:
#!bin/sh

Actually, there are many distribution where /bin/sh is bash (maybe /bin/sh is a link to /bin/bash in those distributions), and not Bourne Shell. So if I try to run a script that is written in bash in, for example, FreeBSD, the result is not defined, since /bin/sh in FreeBSD is Bourne Shell, and not bash.

Is there are easy way to identify if a script is bash or sh?

Are there some distinctive things in syntax?

Best Answer

Actually the shebang lines means something as some distributions like Debian don't use bash for /bin/sh but dash.

The simplest solution to determine if a shell script is bash is to use checkbashism - see man checkbashisms for details.

checkbashisms should be packaged by different distributions, for Debian it is in the devscripts package - Fedora in devscripts-minimal (it used to be in rpmdevtools) and OpenSuSe in rpmlint-mini

Related Question