WSL2环境下Webstorm调用husky钩子报错:Syntax error: "(" unexpected及Illegal option -o pipefail
WSL2环境下Webstorm调用husky钩子报错:Syntax error: "(" unexpected及Illegal option -o pipefail
兄弟,我太懂你这种明明自己在bash终端操作,结果工具偷偷用sh执行脚本的憋屈了!这俩报错本质都是一个问题:Webstorm触发git钩子时,默认用了sh而不是bash,而sh不支持bash的一些高级语法(比如-o pipefail、某些括号写法)。给你几个实用的排查和解决步骤:
一、先确认当前钩子用的是什么shell
先实锤是不是sh在搞鬼:
- 找到项目里的
.husky/_/husky.sh文件,在开头加一行调试代码:echo "Current shell: $0" > /tmp/husky-shell.log - 然后在Webstorm里触发一次commit操作,之后打开WSL的bash终端,查看
/tmp/husky-shell.log的内容,如果显示sh,那问题根源就找到了。
二、修改Webstorm的终端shell配置
Webstorm默认调用WSL时可能用的是sh,改成bash就行:
- 打开Webstorm的「Settings」(Windows/Linux按
Ctrl+Alt+S) - 找到「Tools → Terminal」
- 在「Shell path」里,把默认的
wsl.exe改成wsl.exe -e bash,或者直接填WSL里bash的绝对路径/usr/bin/bash - 保存设置后重启Webstorm试试
三、强制husky用bash执行钩子
如果Webstorm改了还是不行,直接给husky指定shell:
- 要是你的husky是v7及以上版本,在项目根目录的
.husky文件夹里新建一个config文件,内容写:export HUSKY_SHELL=/bin/bash - 要是用的旧版本husky,可以在
package.json里加配置:{ "husky": { "shell": "/bin/bash" } }
四、全局设置git用bash执行钩子
最后给git全局配置加个保险,确保git本身调用钩子时用bash:
打开WSL的bash终端,执行:
git config --global core.shell /bin/bash
按这几步来,应该就能解决那俩报错了!我之前就是这么搞定Webstorm和WSL husky的兼容性问题的~
备注:内容来源于stack exchange,提问作者Big Biggums
相关产品推荐
相关产品推荐

