Windows下Git Bash执行含psql命令的Bash脚本停滞无报错求助
解决Git Bash中PostgreSQL脚本停滞无输出的问题
你的脚本执行后卡在Configuring dragonstackdb这一步,没有后续输出也没报错,这种情况十有八九是PostgreSQL命令在后台等待密码输入,但非交互式脚本没给出输入提示导致的——毕竟你用-U node_user指定了用户,如果PostgreSQL的认证规则要求该用户输入密码,脚本就会陷入"静默等待"的状态,看起来像是停滞了。
下面给你几个实用的解决方案:
1. 通过环境变量传递密码(快速临时解决)
在脚本里执行PostgreSQL命令前,先设置PGPASSWORD环境变量,让命令自动读取密码,无需交互输入:
修改你的configure_db.sh脚本:
#!/bin/bash echo "Configuring dragonstackdb"; # 替换成你的node_user实际密码 export PGPASSWORD="your_node_user_password" dropdb -U node_user dragonstackdb; createdb -U node_user dragonstackdb; psql -U node_user dragonstackdb <./bin/sql/generation.sql; psql -U node_user dragonstackdb <./bin/sql/dragon.sql; unset PGPASSWORD # 可选:执行完清除密码环境变量 echo "dragonstackdb configured";
2. 修改PostgreSQL认证配置(更安全的长期方案)
不想在脚本里明文写密码的话,可以修改PostgreSQL的pg_hba.conf文件,让node_user本地连接时无需密码:
- 找到PostgreSQL安装目录下的
data文件夹,比如C:\Program Files\PostgreSQL\15\data\pg_hba.conf - 打开文件,找到针对本地连接的配置行,把认证方式从
md5改成trust(Windows环境推荐):# 原配置可能是这样 local all all md5 # 修改为针对node_user的信任认证 local dragonstackdb node_user trust - 保存文件后,重启Windows服务里的
postgresql-x64-xxx服务(按下Win+R输入services.msc找到对应服务重启)
3. 先确认PostgreSQL服务状态
也别忘了检查PostgreSQL服务是否在运行:
- 按下Win+R输入
services.msc打开服务管理器 - 找到PostgreSQL相关服务,确保状态是"正在运行",如果没启动就手动启动它
额外调试小技巧
要是还定位不到问题,可以在脚本开头加set -x开启调试模式,这样会输出每一步执行的命令,帮你精准找到卡住的环节:
#!/bin/bash set -x # 开启调试输出 echo "Configuring dragonstackdb"; dropdb -U node_user dragonstackdb; createdb -U node_user dragonstackdb; psql -U node_user dragonstackdb <./bin/sql/generation.sql; psql -U node_user dragonstackdb <./bin/sql/dragon.sql; echo "dragonstackdb configured";
内容的提问来源于stack exchange,提问作者Masenko 22
相关产品推荐
相关产品推荐

