docker - 当 docker-compose run -e 调用我的环境时,Sed 在文件中

标签 docker shell sed docker-compose

很难解释我需要什么,但我会尽力而为。

在entrypoint.sh文件中我写了这些行:

if [ ! -z "${BROTLI_COMPRESS_Vals}" ]; then \
  sed -i \
  -e '/LoadModule .*mod_brotli.so/ s/^#*/#/'   \
  /config/default.conf
&& echo AddOutputFilterByType BROTLI_COMPRESS $BROTLI_COMPRESS_Vals  >> /config/default.conf
fi;

default.conf 文件仅包含这一行:

#LoadModule brotli_module modules/mod_brotli.so

然后当我运行这个命令时:

docker-compose run -e BROTLI_COMPRESS_Vals="text/plain" mycontainer

然后这是default.conf:

LoadModule brotli_module modules/mod_brotli.so 
AddOutputFilterByType BROTLI_COMPRESS text/plain

取消注释第一行,如您所见,并在运行 docker-compose run 命令时添加一行我设置的内容 {BROTLI_COMPRESS_Vals="text/plain “})

另外 -e BROTLI_COMPRESS_Vals 是可选的(如果用户写入,则按照我所说的操作,如果不是,default.conf 有一个注释行)

我怎样才能做到这一点?

最佳答案

像这样吗?

#!/usr/bin/env bash

# BROTLI_COMPRESS_Vals="text/plain"
replacement="AddOutputFilterByType BROTLI_COMPRESS $BROTLI_COMPRESS_Vals"
target_file="/config/default.conf"

if [ -n "${BROTLI_COMPRESS_Vals}" ]; then
    replacement="$(echo "$replacement" | sed 's/[][\\\/\.^$+*?(){}|]/\\&/g')"
    sed -i "0,/^#\(.*\)$/s//\1\n${replacement}/" "$target_file"
fi
$ cat config.txt
#LoadModule brotli_module modules/mod_brotli.so
#LoadModule brotli_module modules/mod_brotli.so
#LoadModule brotli_module modules/mod_brotli.so
$ ./shell.sh
LoadModule brotli_module modules/mod_brotli.so
AddOutputFilterByType BROTLI_COMPRESS text/plain
#LoadModule brotli_module modules/mod_brotli.so
#LoadModule brotli_module modules/mod_brotli.so

请务必先备份您的文件。

关于docker - 当 docker-compose run -e 调用我的环境时,Sed 在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68053886/

相关文章:

bash - 提示用户选择带有 bash 脚本的目录并读取结果

unix - 从 sed/START/,/END/中排除第一行和最后一行

mysql - Nodejs mysql.createConnection 不接受密码

docker - 防止故障容器自动重启以进行调试

bash - 写入带有网络掩码的 IP (sed)

linux - 删除空行旁边一行的 Shell 脚本

regex - 在字符串中查找日期和时间并在 Windows 或 cmd 中使用 sed 重新格式化删除空格

node.js - 容器化时 NodeJS 应用程序停止工作 [容器中的 FTP 服务器]

linux - 命名空间的 docker 问题 - 容器 ID 110090219 无法映射到主机 ID

linux - 从 bash 中的文件相乘的单行命令