我已经构建了一个 docker 容器,我需要对service.nginx
文件进行更改。
我定义了以下变量:
LINE=$(cat /usr/lib/systemd/system/nginx.service | grep -n "ExecStart=" | cut -d: -f1)
APPEND=$(cat /usr/lib/systemd/system/nginx.service | grep "ExecStart=")
CONFIG=" -e\ /nginx/nginx.conf"
FILE="/usr/lib/systemd/system/nginx.service"
这些的输出是:
13
ExecStart=/usr/sbin/nginx
-e\ /nginx/nginx.conf
/usr/lib/systemd/system/nginx.service
我想将服务文件中的第 13 行更改为
ExecStart=/usr/sbin/nginx
到
ExecStart=/usr/sbin/nginx -e\ /nginx/nginx.conf
我用和尝试了几个awk
命令,但我一生都无法生成该文件。NR
gsub
我正在思考以下内容:
awk 'NR==$LINE{gsub("$APPEND", "$APPEND$CONFIG)};1' $FILE > tmp && mv tmp $FILE
它只是生成一个新文件,没有进行任何更改。
答案1
位于的 systemd 文件/usr/lib/systemd
不应由用户修改。单元文件可以放置在 中,/etc/systemd/system
以覆盖操作系统提供的单元文件中的配置。对于您的情况,您需要一个名为的文件,/etc/systemd/system/nginx.service
仅包含以下内容:
[Service]
ExecStart=/usr/sbin/nginx -e /nginx/nginx.conf
awk
您的示例不起作用的原因是您尝试在单引号内使用 shell 变量,它们不会扩展并保持字面量。您可以使用-v
选项 forawk
来传入 shell 变量:
awk -v "LINE=$LINE" -v "APPEND=$APPEND" -v "CONFIG=$CONFIG" 'NR==LINE{gsub(APPEND, APPEND""CONFIG)};1' $FILE > tmp && mv tmp $FILE