Динамическая установка переменных окружения в Linux - PullRequest
0 голосов
/ 12 ноября 2009

В настоящее время я ищу способ установки переменных среды в Linux с помощью простого сценария оболочки. Внутри скрипта я в настоящее время использую команду «export», однако это имеет область действия только внутри скрипта, где требуется общесистемная область.

Могу ли я в любом случае сделать это с помощью сценария оболочки или нужно будет использовать другой метод?

Ответы [ 5 ]

3 голосов
/ 12 ноября 2009

Когда вы запускаете сценарий оболочки, он выполняется в под-оболочке. То, что вам нужно, это выполнить его в контексте текущей оболочки, поставив его с:

source myshell.sh

или

. myshell.sh

Последнее - мой предпочтительный подход, так как я по своей природе ленив.

Если вы говорите об общесистемной области видимости, поскольку вы хотите повлиять на всех, вам нужно поместить свои команды в место, где они получены во время входа в систему (или во время создания оболочки), /etc/profile например. То, куда вы помещаете свои команды, зависит от используемой оболочки.

Чтобы узнать, какие сценарии выполняются, просмотрите страницу man для вашей оболочки:

man bash

Оболочка bash, когда вызывается как оболочка входа в систему (в том числе как оболочка без регистрации, но с параметром --login), будет использовать /etc/profile и первое из ~/.bash_profile, ~/.bash_login или ~/.profile.

Не входящие в систему bash оболочки будут использовать. если не вызывается с --norc или --rcfile <filename>, файлы /etc/bash.bashrc и ~/.bashrc.

Я почти уверен, что это даже больше запутанного, чем это, в зависимости от того, как работает оболочка, но это настолько сильно, насколько растягивается моя память. На странице man все должно быть подробно.

0 голосов
/ 12 ноября 2009

Фундаментальный аспект переменных среды заключается в том, что вы не можете влиять на среду ни для одного процесса, кроме ваших собственных и дочерних процессов, которые вы порождаете. Вы не можете создать сценарий, который устанавливает «общесистемные» переменные среды, которые каким-то образом становятся пригодными для использования другими процессами.

0 голосов
/ 12 ноября 2009

test.sh

#!/bin/bash
echo "export MY_VAR=STACK_OVERFLOW" >> $HOME/.bashrc
. $HOME/.bashrc
sh task.sh

task.sh

#!/bin/sh

echo $MY_VAR

Добавить исполняемые права:

chmod +x test.sh task.sh

и lauch test.sh

./test.sh

Результат:

STACK_OVERFLOW
0 голосов
/ 12 ноября 2009

Вы можете сделать так, чтобы ваш скрипт проверял наличие чего-то вроде / var / myprog / env-vars-to-load и 'source', а затем отключал его, если он существует, возможно, используя trap и сигнал. Трудно сказать, я не знаком с вашей программой.

Нет способа «внедрить» переменные окружения в адресное пространство другого процесса, поэтому вам нужно будет найти какой-нибудь метод IPC, который может проинструктировать процесс о том, что устанавливать.

0 голосов
/ 12 ноября 2009

В приглашении оболочки:

$ source script.sh

И установите env vars в script.sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...