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

GitHub Action中使用sed替换MongoDB连接字符串出现重复写入的问题求助

GitHub Action中使用sed替换MongoDB连接字符串出现重复写入的问题求助

我在GitHub Action里执行了一段sed命令,想要把.env.production文件里的DB_URI替换成指定的MongoDB连接字符串,命令是这样的:

sed -i "s#DB_URI=.*$#DB_URI=mongodb+srv://xxxxxx:xxxxxxxx@db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxxxx.com/webapp_test?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discovery#"

但执行后发现.env.production里的DB_URI出现了重复写入的情况,最终内容变成了这样:

DB_URI=***db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxx.com/webapp_test?tls=trueDB_URI=***db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxx.com/webapp?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discoveryauthSource=adminDB_URI=***db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxx.com/webapp?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discoveryreplicaSet=db-mongodb-sfo3-api-discovery

有没有大佬能帮我看看怎么解决这个重复写入的问题?


问题分析&解决方案

我之前遇到过类似的坑,大概率是这两个原因导致的:

  1. 连接字符串里的特殊字符未转义
    你的MongoDB连接字符串包含&符号,在shell环境中&是后台执行命令的分隔符,sed解析时会把它当成命令结束标记,导致替换内容被截断,后续的authSource=admin等内容被错误拼接,最终出现重复写入的混乱结果。

  2. sed命令未指定目标文件
    你写的sed命令末尾没有明确指定要操作的.env.production文件,如果没指定目标文件,sed会默认从标准输入读取内容再输出到标准输出,要是GitHub Action环境里有其他输入流干扰,也可能触发重复写入的问题。

给你两个亲测有效的解决办法:

方法一:转义特殊字符并指定目标文件

把连接字符串里的&转义成\&,同时在命令末尾加上目标文件名.env.production,修改后的命令如下:

sed -i "s#DB_URI=.*$#DB_URI=mongodb+srv://xxxxxx:xxxxxxxx@db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxxxx.com/webapp_test?tls=true\&authSource=admin\&replicaSet=db-mongodb-sfo3-api-discovery#" .env.production

方法二:用单引号包裹替换内容

单引号在shell中不会解析特殊字符,这样就不用手动转义&了,命令改成:

sed -i 's#DB_URI=.*$#DB_URI=mongodb+srv://xxxxxx:xxxxxxxx@db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxxxx.com/webapp_test?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discovery#' .env.production

另外建议你在执行sed命令前,先打印.env.production的内容确认初始DB_URI格式是否正常,避免原文件里存在多个DB_URI行导致多次替换。

备注:内容来源于stack exchange,提问作者DevOPs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:49:43