从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)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何从 sed 文件启动多个应用程序

从广播接收器更改片段

将微调器值从片段传递到活动