Как создать файл конфигурации bash скрипт с переменными внутри - PullRequest
1 голос
/ 18 января 2020

Я изучаю BASH и пытаюсь создать скрипт, который генерирует файл конфигурации, в котором я хочу использовать переменные. Но, разумеется, как это текстовый файл, переменная $ {MONGO_PORT} не заменяется нужным мне значением.

(
cat << MONGOD_CONF
# /etc/mongod.conf

systemLog:
    destination: file
    path: /datos/log/mongod.log
    logAppend: true

storage:
    dbPath: /datos/db
    engine: wiredTiger

net:
    port: ${MONGO_PORT}

security:
    authorization: enabled    
MONGOD_CONF
) > /etc/mongod.conf
  • Первая проблема связана с разрешением на создание файл, который я избегаю, создав файл в / tmp и переместив его в / et c. Потому что это не работает.

        sudo cat << MONGOD_CONF
    
  • Второй и более важный вопрос - о том, как заменить переменную значением

Есть ли способ заставить это работать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 января 2020

Если установлено MONGO_PART, здесь документ может быть расширен в параметрах, и вы получите значение параметра в вашем файле.

Используйте tee вместо cat, что может открыть сам файл вывода:

sudo tee /etc/mongod.conf > /dev/null << MONGOD_CONF
    ...
MONGOD_CONF
0 голосов
/ 18 января 2020

При выполнении сценария с sudo ... сценарий будет выполняться в новой среде. Это сделано в целях безопасности - для предотвращения внедрения переменных среды, которые могут изменить поведение сценария.

Два варианта решения проблемы: разверните файл конфигурации как обычный пользователь и выполните сохранение как sudu, или Используйте один из параметров, чтобы разрешить передачу переменных среды в вызов sudo

. Первая альтернатива - изменить сценарий для расширения файла конфигурации в качестве текущего пользователя (с доступом ко всем параметрам), и используйте sudo только для помещения файла в / et c

(sudo cat > /etc/mongod.conf) <<MONGOD_CONF
...
MONGOD_CONF

Альтернативный вариант - использовать параметр --preserve-env (можно указать несколько переменных в виде списка через запятую).

sudo --preserve-env=MONGO_PORT

Настоятельно рекомендуется избегать -E (--preserve-env, без параметров), так как это может открыть скрипт для использования в безопасности.

...