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
相关产品推荐
相关产品推荐

