Я хотел бы задать несколько переменных среды (во время загрузки) на машине 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
. Обязательно прочитайте комментарии в заголовке.