You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Gitbash执行Drush sqlq命令遇引号匹配EOF错误,请求排查

解决Git Bash中Drush SQL查询命令的引号解析错误

我之前也踩过Git Bash里Drush命令引号解析的坑,你的问题根源在于Git Bash对双引号的处理逻辑和标准Unix shell(比如Linux的bash)不一致,导致SQL语句的引号被提前拆解,Drush收到的参数不完整,从而抛出引号不匹配的EOF错误。而像drush @site cc all这类没有引号的简单命令,不需要处理引号转义,所以能正常执行。

这里有几个可靠的解决方案,你可以按情况尝试:

方案1:转义双引号

在Git Bash中,你需要用反斜杠\转义SQL语句外层的双引号,让Git Bash把完整的带引号的SQL语句传递给Drush:

drush @site sqlq \"select * from tablename\"

方案2:改用单引号包裹SQL语句

Git Bash对单引号的处理更贴近标准shell,直接用单引号包裹SQL语句就能避免解析问题:

drush @site sqlq 'select * from tablename'

如果你的SQL语句本身包含单引号(比如select * from users where name='admin'),可以把内部的单引号转义为\',或者用双引号包裹整个语句并转义内部双引号,比如:

drush @site sqlq "select * from users where name='admin'"
# 或者
drush @site sqlq 'select * from users where name=\'admin\''

方案3:使用Here文档(适合复杂SQL)

如果你的SQL语句很长或者包含多种引号,可以用Here文档的方式传递,避免引号冲突:

drush @site sqlq << 'EOF'
select * from tablename
where created > 1600000000
and status = 1
EOF

注意这里的EOF前后不要有多余空格,并且单引号包裹的EOF会让Git Bash不解析内部的变量或转义字符,确保SQL原封不动传递给Drush。

这些方法都能解决Git Bash下的引号解析问题,你可以根据自己的SQL复杂度选择合适的方式。

内容的提问来源于stack exchange,提问作者Prachit Patil

火山引擎 最新活动