Even with lots of experience, one learns new things every day.
A while ago, I discovered checkbashisms
which checks sh
shel scripts (usually with extension .sh
) scripts to they do not contain code specific to bash
.
[Wayback] checkbashisms(1) – Linux man page
checkbashisms, based on one of the checks from the lintian system, performs basic checks on /bin/sh shell scripts for the possible presence of bashisms. It takes the names of the shell scripts on the command line, and outputs warnings if possible bashisms are detected.
Note that the definition of a bashism in this context roughly equates to “a shell feature that is not required to be supported by POSIX”; this means that some issues flagged may be permitted under optional sections of POSIX, such as XSI or User Portability.
In cases where POSIX and Debian Policy disagree, checkbashisms by default allows extensions permitted by Policy but may also provide options for stricter checking.
The source by now is a Perl script (it used to be a bash script) of which you can find the latest version here: [Wayback] scripts/checkbashisms.pl · master · Debian / devscripts · GitLab
Not installed by default
Virtually no distribution has checkbashisms installed by default.
In fact, the package containing checkbashisms heavily varies by distribution.
For OpenSuSE, it is in a package by itself: [Wayback] openSUSE Software: package checkbashisms
checkbashisms
Tool for Checking /bin/sh Scripts for Possible Bashisms
checkbashisms performs basic checks on /bin/sh shell scripts for the possible presence of bashisms. It takes the names of the shell scripts on the command line, and outputs warnings if possible bashisms are detected.
–jeroen