2008-11-20 2 views
7

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

экспорт my_var =/опт/my_var

Но мне нужна переменная окружения будет доступна на системном уровне, хотя. Это возможно?

ответ

5

Это единственный способ, которым я знаю, чтобы делать то, что вы хотите:

В foo.sh, у вас есть:

#!/bin/bash 
echo MYVAR=abc123 

И если вы хотите, чтобы получить значение переменной, то есть сделать следующее:

$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH 
$ echo $MYVAR #==> abc123 

в зависимости от того, что вы хотите сделать, и как вы хотите сделать это, можно было бы использовать предложение Дугласа Leeder в об использовании источника, но это будет источником всего файла, функции и все. Используя eval, будет оцениваться только материал, который получает эхо.

+0

Я просто пытался сделать это сам. У меня были eval и $ (foo), за исключением того, что я оставил цитаты вокруг аргумента eval. Не работает. Спасибо за синтаксическое исправление. – jmanning2k 2008-12-05 22:38:35

13

Не совсем - как только вы работаете в подпроцессе, вы не можете повлиять на своего родителя.

Там две возможности:

1) Источник сценария, а не запустить его (см source .):

 
    source {script} 

2) имеют выход скрипт экспорта команды, и Eval, что:

 
    eval `bash {script}` 
OR: 
    eval "$(bash script.sh)" 

EDIT: Исправлена ​​вторая опция, которая должна быть скорее eval, чем источником. Opps.

1

Задайте переменную в файле/etc/profile (при необходимости создайте файл). Это позволит сделать переменную доступной для каждого процесса bash.

0

Задайте переменную в файле/etc/profile (при необходимости создайте файл). Это позволит сделать переменную доступной для каждого процесса bash.

... каждый новый процесс Баш ...

Смежные вопросы