Text-Processing

在服務文件中追加一行

  • December 13, 2019

我已經建構了一個 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

它只是生成一個沒有更改的新文件。

位於其中的 systemd 文件/usr/lib/systemd不應由使用者修改。可以將單元文件放在/etc/systemd/systemOS 提供的單元文件中以覆蓋配置。在您的情況下,您需要一個名為/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

引用自:https://unix.stackexchange.com/questions/557076