You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:02:40