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

Bash嵌套引号问题:Docker容器内MySQL全局变量设置失败

解决Docker exec嵌套引号导致MySQL语法错误的问题

问题原因

你遇到的ERROR 1064本质是嵌套引号解析冲突:bash -c参数用单引号包裹整个mysql命令,而mysql的SET语句里又用了单引号,bash会提前截断字符串,导致MySQL收到不完整的SQL语句,触发语法错误。

解决方案

方案1:bash单引号内嵌入单引号的标准写法

将MySQL语句中的单引号替换为'\''(bash中嵌入单引号的特殊语法:闭合当前单引号 → 输出一个单引号 → 重新开启单引号),修正后的命令:

docker exec abc bash -c 'mysql -e "SET GLOBAL clone_valid_donor_list = '\''10.18.111.76:3306'\'';"'

注意:Java执行时建议去掉-it参数(交互式终端参数,非交互式场景无需),避免阻塞或输出异常。

对应Java代码中的命令字符串(需转义双引号):

String dockerCmd = "docker exec abc bash -c 'mysql -e \"SET GLOBAL clone_valid_donor_list = '\''10.18.111.76:3306'\'';\"'";

方案2:切换引号层级,用双引号包裹bash命令

将bash -c的外层包裹改为双引号,MySQL语句用单引号,同时转义内部的双引号,修正后的命令:

docker exec abc bash -c "mysql -e 'SET GLOBAL clone_valid_donor_list = \"10.18.111.76:3306\";'"

对应Java代码中的命令字符串(需转义双引号和内部的转义符):

String dockerCmd = "docker exec abc bash -c \"mysql -e 'SET GLOBAL clone_valid_donor_list = \\\"10.18.111.76:3306\\\";'\"";

两种方案都能让bash正确解析完整的MySQL命令,避免语法错误,且适合Java程序化一次性执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:36:05