Text-Processing
在服務文件中追加一行
我已經建構了一個 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/system
OS 提供的單元文件中以覆蓋配置。在您的情況下,您需要一個名為/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