Как задать переменную среды во время загрузки (с помощью скрипта)?

Как задать переменную среды во время загрузки (с помощью скрипта)?

Я хотел бы задать несколько переменных среды (во время загрузки) на машине Ubuntu (10.04), но я хочу создать их значения с помощью скрипта, примерно так:

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • Причина, по которой я хочу это сделать, заключается в том, что команды, используемые для установки переменных окружения, выполняются долго (около 10 секунд), поэтому я хочу сделать это только один раз после загрузки. В любом случае, в настоящее время я решил эту проблему, кэшируя результат команды во время загрузки, так что последующие вызовы будут выполняться быстро, таким образом, вообще не используя переменные окружения.

Я пробовал установить /etc/environment, но это только копирует rhs дословно

Я пробовал запустить скрипт при /etc/init.d/запуске, но это не сработало.

Идеи?

решение1

Чтобы задать общесистемные переменные среды, доступные при загрузке, вы помещаете их в /etc/environment. Этот файл не является файлом скрипта, а скорее состоит из выражений присваивания, по одному на строку. Вот так:

SYSTEM_FOO=barnone

Примечание: Расширение переменных не работает в /etc/environment.

Исходная информация отhelp.ubuntu.com

решение2

Положи это в ~/.bash_profileили~/.bashrc

gedit ~/.bashrc

Используйте .bash_profile, если вам нужно использовать эти переменные с неинтерактивными оболочками (скриптами), и ~/.bashrc, если вы устанавливаете переменные в оболочке.

Если это не сработает, нам нужны дополнительные сведения, в частности, какие переменные вы устанавливаете и с какой целью?

решение3

Хотя это вряд ли будет хорошей практикой, вы можете указать переменные окружения в качестве параметров ядра. Ядро Linuxдокументациясодержит полезную информацию по этому поводу (важный абзац выделен жирным шрифтом):

Список аргументов

Командная строка ядра разбирается на список строк (аргументов загрузки), разделенных пробелами. Большинство аргументов загрузки имеют вид:

 name[=value_1][,value_2]...[,value_10]

где 'name' — уникальное ключевое слово, которое используется для определения того, какой части ядра должны быть переданы связанные значения (если таковые имеются). Обратите внимание, что ограничение в 10 является реальным, поскольку текущий код обрабатывает только 10 параметров, разделенных запятыми, на одно ключевое слово. (Однако вы можете повторно использовать то же самое ключевое слово с дополнительными 10 параметрами в необычно сложных ситуациях, > предполагая, что функция настройки поддерживает это.)

Большая часть сортировки закодирована в исходном файле ядра init/main.c. Сначала ядро ​​проверяет, является ли аргумент одним из специальных аргументов 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug' или 'init'. Значение этих специальных аргументов описано ниже.

Затем он проходит по списку функций настройки, чтобы увидеть, была ли указанная строка аргумента (например, 'foo') связана с функцией настройки ('foo_setup()') для определенного устройства или части ядра. Если вы передали ядру строку foo=3,4,5,6, то ядро ​​будет искать массив bootsetups, чтобы узнать, зарегистрирована ли 'foo'. Если да, то оно вызовет функцию настройки, связанную с 'foo' (foo_setup()), и передаст ей аргументы 3, 4, 5 и 6, указанные в командной строке ядра.

Все, что имеет вид 'foo=bar', не принятое как функция настройки, как описано выше, интерпретируется как переменная окружения, которую нужно установить.
(Бесполезным?) примером может быть использование 'TERM=vt100' в качестве аргумента загрузки.

Все оставшиеся аргументы, которые не были подхвачены ядром и не были интерпретированы как переменные среды, затем передаются в PID 1, который обычно является программой init(1). Наиболее распространенным аргументом, который передается в процесс init, является слово «single», которое предписывает ему загрузить компьютер в однопользовательском режиме и не запускать все обычные демоны. Проверьте страницу руководства, чтобы узнать версию init(1), установленную в вашей системе, чтобы узнать, какие аргументы она принимает.

ЭтотВ ответе AskUbuntu есть несколько хороших инструкций по изменению параметров загрузки ядра.

решение4

Введите свои команды в /etc/rc.local. Обязательно прочитайте комментарии в заголовке.

Связанный контент