从docker-compose执行sed
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从docker-compose执行sed相关的知识,希望对你有一定的参考价值。
我试图从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
答案
您不需要转义双引号内的单引号。双单引号(原文如此)通过逐字传递,产生/Http
作为sed
看到的第一个字符串,显然缺少一个结束斜线。
如果字符串用单引号括起来,则YAML引用需要加倍的单引号;但是你使用了双引号,因此值中的单个引号不需要转义(并且在shell删除相邻的空引号对之后尝试将有效地导致没有引号)。
以上是关于从docker-compose执行sed的主要内容,如果未能解决你的问题,请参考以下文章
Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题