当docker编写run-e调用我的env时,Sed在文件中



很难解释我需要什么,但我已经尽力了。

在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命令时设置的内容

此外,-e BROTLI_COMPRES_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//1n${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

请确保先备份您的文件。

相关内容

  • 没有找到相关文章

最新更新