Я использую aws cfn для запуска экземпляров ubuntu, и мне нужно передать переменные, предоставленные в скрипте запуска cfn, скриптам на экземпляре. Например, я могу передать "db-server=db-2.domain.com", и на экземпляре есть несколько скриптов, которые хотят знать этот адрес.
На данный момент я создаю файл в /etc/profile.d, устанавливая переменные с помощью export
, но это работает только в том случае, если bash запущен как оболочка входа в систему, что требует дополнительных действий с моей стороны, чтобы иметь эти переменные везде.
Поэтому я подумал, что, возможно, вместо этого я мог бы создать файлы в /usr/local/bin, например, get-db-host.sh
с echo "db-2.domain.com"
таким же содержимым, и тогда они были бы доступны каждому скрипту без необходимости внесения изменений.
Хороший ли это подход?
решение1
Хороший ли это подход?
Я почти уверен, что все скрипты, о которых вы говорите, являются скриптами оболочки. В этом случае вы могли бы просто поместить все ваши переменные в файл конфигурации:
db-server=db-2.domain.com
Поместите его в стандартное место (например, /usr/local/etc/myapp/
) и используйте его в других скриптах:
. /usr/local/etc/myapp
Конечно, вы также можете использовать просто /etc
.
решение2
Рекомендуемый метод — просто добавить переменные в /etc/environment
. Этот файл считывается при входе в систему (изДокументация Ubuntu):
Параметры переменных среды, которые влияют на систему в целом (а не только на конкретного пользователя), не следует помещать ни в один из многочисленных сценариев системного уровня, которые выполняются при загрузке системы или сеанса рабочего стола, а в
/etc/environment - Этот файл специально предназначен для общесистемных настроек переменных окружения. Это не файл скрипта, а скорее состоит из выражений назначения, по одному на строку. В частности, этот файл хранит общесистемные настройки локали и пути.
Итак, просто отредактируйте /etc/environment/
и добавьте
db-server=db-2.domain.com
решение3
Я бы сказал нет этой идее. Этот каталог /usr/local/bin
предназначен для исполняемых файлов, которые являются локальными для коробки и не являются частью какого-либо конкретного пакета (обычно).
Вместо того чтобы создавать какую-то таинственную настройку, разместите переменные там, где они будут очевидны для кого-то другого, кому может потребоваться выполнить вашу задачу.
Я бы поместил их в файл в вашем $HOME
каталоге и просто взял бы этот файл из вашего $HOME/.bashrc
.
Пример
if [ -f $HOME/.my_aws_env ]; then
. $HOME/.my_aws_env
fi
Или вы можете быть крутым и модным и сделать это одной строкой:
[ -f $HOME/.my_aws_env ] && . $HOME/.my_aws_env