Передать переменную из сценария оболочки в файл конфигурации - PullRequest
0 голосов
/ 04 марта 2020

Мне нужно написать скрипт оболочки для динамической установки нескольких сервисов. Я не слишком много знаю о сценариях оболочки или о генерале оболочки unix, поэтому мне действительно нужна помощь. Это мой файл оболочки.

#!/bin/bash
# Ask the user for their name
echo What is the name of your domain?
read varname

echo You passed the domain name to your domain $varname successfully

Это мой файл nginx .conf.

server {
  listen                80;
  server_name           $varname;
  rewrite     ^(.*)     https://$server_name$1 permanent;
}

Я хочу передать varname в файл nginx .conf установить имя сервера на основе ввода пользователя. Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 04 марта 2020

Вы можете создать файл nginx.conf из наследника c.

#!/bin/bash
# Ask the user for their name
echo What is the name of your domain?
read varname

cat > nginx.conf <<EOF
server {
  listen                80;
  server_name           $varname;
  rewrite     ^(.*)     https://\$server_name\$1 permanent;
}
EOF

echo You passed the domain name to your domain $varname successfully

Примечание: в строке rewrite я экранировал символы $, чтобы получить буквальный $ в вывод вместо расширения переменной оболочки.

Если я введу foobar, это приведет к файлу nginx.conf, например:

server {
  listen                80;
  server_name           foobar;
  rewrite     ^(.*)     https://$server_name$1 permanent;
}
1 голос
/ 04 марта 2020

Вы можете использовать envsubst для этого.

Переименуйте ваш nginx.conf в nginx.conf.template и измените ваш скрипт на:

#!/bin/bash

read -p "What is the name of your domain? " varname

export varname
envsubst '$varname' < nginx.conf.template > nginx.conf

echo "You passed the domain name to your domain $varname successfully"
1 голос
/ 04 марта 2020

Не могли бы вы попробовать следующее. Это изменит значение в строке, которое начинается с пробела и имеет последнее поле server_name на предоставленное пользователем значение.

#!/bin/bash
# Ask the user for their name
echo What is the name of your domain?
read varname

awk -v var="$varname" '/^ +server_name/{$NF=var} 1' nginx.conf > temp && mv temp nginx.conf &&\
echo You passed the domain name to your domain $varname successfully
...