很难解释我需要什么,但我会尽力而为。
在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/