从docker-compose执行sed

问题描述 投票:0回答:1

我试图从docker compose文件执行sed命令。该命令正在寻找匹配文件中的一些文本,然后用文本替换下一行文本。我正在执行的命令是:

 command: bash -c "sed ''/Http Basic Authentication Filter/!b;n;c<filter>'' webapps/engine-rest/WEB-INF/web.xml > webapps/engine-rest/WEB-INF/noauth.xml"

我可以直接在bash中运行命令,它按预期工作但运行docker-up我得到:

sed: unmatched '/'
bash: n: command not found
bash: filter: No such file or directory

所以我假设这是一个YAML角色逃避问题,但我似乎无法让它工作。

我也试过以下内容以避免转义字符:

    command: > 
     bash -c sed '/Http Basic Authentication Filter/!b;n;c<filter>' webapps/engine-rest/WEB-INF/web.xml > webapps/engine-rest/WEB-INF/noauth.xml
bash sed docker-compose
1个回答
0
投票

您不需要转义双引号内的单引号。双单引号(原文如此)通过逐字传递,产生/Http作为sed看到的第一个字符串,显然缺少一个结束斜线。

如果字符串用单引号括起来,则YAML引用需要加倍的单引号;但是你使用了双引号,因此值中的单个引号不需要转义(并且在shell删除相邻的空引号对之后尝试将有效地导致没有引号)。

© www.soinside.com 2019 - 2024. All rights reserved.