When I teach or mentor shell scripting on macOS, I always have two recommendations: use BBEdit as your text editor and use shellcheck to verify sh and bash scripts.
I only discovered recently, that the two combine wonderfully!
It used to be that installing the shellcheck command line tool on macOS was a complicated process. Thankfully, the GitHub project now provides a pre-compiled binary for macOS, so you don’t have to mess with all of that anymore. The project labels the macOS version as ‘darwin.’ The binary is x86_64 (Intel) only and requires Rosetta on Apple silicon, but this doesn’t reduce its usefulness.
Installing shellcheck
The easiest way to install the command is to download the archive from the repo, expand the archive, and copy the shellcheck binary to /usr/local/bin/
. You can follow the instructions from this earlier post to do it in Terminal or do it with your browser and in the Finder. When you download and unarchive manually, you will have to remove the quarantine flag from the shellcheck command, before you can use it.
> xattr -d com.apple.quarantine shellcheck-latest/shellcheck
I also created shellcheck recipes for AutoPkg, that automate creating a package installer for mass deployment.
Using shellcheck
Once you have the shellcheck command in place, you can use it from the command line:
> shellcheck my_great_script.sh
Sadly, shellcheck will only work with sh and bash scripts, not with zsh scripts. On the other hand, many of the common mistakes that shellcheck catches, (mostly quoting variables) are not mistakes in zsh. Still, I miss it a lot when working on large zsh scripts.
shellcheck with BBEdit
Once you have the shellcheck command installed, you can also invoke from within BBEdit: When you have a script open in BBEdit, verify that the script is recognized as a ‘Unix shell script.’ Then you can select ‘Check Syntax…’ from the ‘#!’ menu (keyboard shortcut ⌘-K). This will open a second window with all the issues shellcheck has found.
This feature was added in BBEdit 13.1, but it took me quite a while to discover it. Now I find it indispensable.
Enjoy!
I must be missing something because I tried this and it didn’t work. I downloaded it from https://shellcheck.storage.googleapis.com/shellcheck-latest.darwin.x86_64.tar.xz (from one of the other articles you linked), unarchived in Finder, ran the xattr command to remove the quarantine flag, and then copied the binary to /usr/local/bin. I closed/reopened BBEdit, created a dummy script that had a simple syntax error (shellcheck.net found the error), and made sure the type of script Unix Shell Script. When I went to Check Syntax, though, it didn’t find any problems.
Is there a missing step where I needed to add shellcheck as a linter in BBEdit?
No, that is how I do it. Have you verified that you can invoke shellcheck from the command line? Those quarantine flags have a nasty habit of re-appearing