Как экспортировать переменную в bash - PullRequest
9 голосов
/ 21 ноября 2008

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

export MY_VAR=/opt/my_var

Но мне нужно, чтобы переменная окружения была доступна на системном уровне. Возможно ли это?

Ответы [ 4 ]

13 голосов
/ 21 ноября 2008

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

Есть две возможности:

1) Создавайте сценарий, а не запускайте его (см. source. ):

    source {script}

2) Сценарий должен выводить команды экспорта и указывать следующее:

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

EDIT: Исправлен второй вариант, чтобы быть eval, а не source. Opps.

6 голосов
/ 21 ноября 2008

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

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

#!/bin/bash
echo MYVAR=abc123

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

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

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

1 голос
/ 15 июля 2015

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

... к каждому новому процессу bash ...

1 голос
/ 21 ноября 2008

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

...