Windows命令行运行含SQL命令的.sh文件时报psql未找到如何解决?
问题根因
你在PowerShell中能正常识别psql命令,是因为你配置的是Windows系统的环境变量,加载的是Windows版本的PostgreSQL客户端。而你执行.sh脚本时,实际是调用WSL内的Ubuntu bash环境执行代码,默认状态下WSL的Ubuntu环境既没有安装psql客户端,也没有继承Windows的PATH环境变量,因此无法找到对应命令。
解决方案
你可以根据自己的使用需求任选以下一种方案处理:
方案1:在WSL的Ubuntu中安装psql客户端
- 打开WSL的Ubuntu终端,依次执行以下命令完成安装:
sudo apt update sudo apt install -y postgresql-client
- 安装完成后在WSL终端执行
psql --version,确认命令能被正常识别后,再运行你的bash脚本即可。
方案2:开启WSL的Windows PATH继承,直接使用Windows版psql
如果你不想在WSL中重复安装PostgreSQL客户端,可以通过修改WSL配置实现PATH继承:
- 打开WSL的Ubuntu终端,执行命令编辑wsl配置文件:
$ sudo nano /etc/wsl.conf - 在文件中添加如下配置:
[interop]
appendWindowsPath = true
- 按
Ctrl+O保存文件,按Ctrl+X退出编辑器。 - 关闭所有WSL窗口,回到PowerShell执行
wsl --shutdown重启WSL使配置生效。 - 重启完成后进入WSL终端,执行
psql --version确认可正常识别即可。
验证方式
处理完成前你可以先直接打开WSL的Ubuntu终端执行psql --version,如果也提示找不到命令,即可确认是上述原因导致的问题,按对应方案处理即可。
内容的提问来源于stack exchange,提问作者hco_3
相关产品推荐
相关产品推荐

