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

Shopware 6:Git Bash中Docker exec+sed修改messenger.yaml报错求助

问题解决:修复Git Bash中docker exec的sed命令错误

错误原因

你遇到的sed: -e expression #1, char 36: unknown option to 's'错误,是因为sed默认用/作为替换命令分隔符,加上Git Bash与容器内Bash的反斜杠转义规则冲突,导致sed解析表达式时异常。同时你需要匹配带#的目标行并移除#,得调整匹配规则和转义方式。

修正后的脚本

# 定义匹配和替换内容,适配Git Bash转义规则
FIND='# '\''App\\\\Message\\\\YourMessage'\'':'
REPLACE='Swag\\\\CodePlugin\\\\ScheduledTask\\\\SendCodePluginInvitationTask:'

# 用@作为sed分隔符,避免特殊字符冲突
docker exec "$SHOPWARE_CONTAINER_ID" sed -i "s@$FIND@$REPLACE@g" "$FILE"

关键说明

  • 更换分隔符:把sed默认的/换成@,避免内容里的\、'等特殊字符被误判为sed命令的一部分。
  • 反斜杠转义:在Git Bash中要传递一个\到容器内的sed,需要写4个\\\\——Git Bash先将\\\\解析为\\,容器内的sed再把\\解析为实际的\,以此匹配yaml文件里的路径分隔符。
  • 单引号处理:用'\''在单引号字符串中插入单引号,确保目标行的'能被正确匹配。
  • 变量加引号:给$SHOPWARE_CONTAINER_ID和$FILE套双引号,防止容器ID或文件路径含空格时出错。

简化写法(直接嵌入sed命令)

如果不想用变量,也可以直接写完整的sed表达式:

docker exec "$SHOPWARE_CONTAINER_ID" sed -i "s@# '\''App\\\\\\\\Message\\\\\\\\YourMessage'\'':@Swag\\\\\\\\CodePlugin\\\\\\\\ScheduledTask\\\\\\\\SendCodePluginInvitationTask:@g" "$FILE"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:08:32