Fixing ‘bash’ is not recognized as an internal or external command when used within npm scripts on Windows

Recently, I’ve lost quite a bit of time figuring why npm scripts would suddenly fail on Windows under Git bash if they tried to execute bash (e.g., “do-something”: “bash ./do-something.sh”).

I was executing the npm scripts from Git Bash as usual, so of course bash.exe was on my path but, it wasn’t found in the environment tied to the process for the script execution:

‘bash’ is not recognized as an internal or external command,
operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! asciidoctor-packt@1.0.0 clean-assets: `bash ./build.sh clean_assets`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the asciidoctor-packt@1.0.0 clean-assets script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

To my surprise, after digging for a while, I’ve realized that the script was executed under cmd.exe.

Apparently, since npm 5, we can select the shell to use by defining the “script-shell” setting in the npm config:

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

After setting this, my problem was directly fixed.

Hope this helps! :)

For reference, I found this related SO question:

Written by

Author, CTO. Subscribe to my newsletter: . Follow me on Twitter

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store