Как я могу убедиться, что переменная окружения установлена ​​для пользователя в сеансе bash?

Как гарантировать, что переменная окружения установлена ​​для пользователя? я имею

MYVAR=whatever
export MYVAR

в файле ~/.bash_profile, но отчет пользователя показывает, что он не работает для них. Что могло случиться?

5 ответов

Решение

Используйте модуль PAM под названием pam_env установить переменные окружения при входе в систему. Если вы используете это решение, переменные среды также будут доступны для программ с графическим интерфейсом, запускаемых непосредственно из "Window Manager" (например, GNOME, KDE), а не только для программ, запускаемых из терминала. Также пользователь может использовать другую оболочку, а не только Bash. Может быть, эта статья от О'Рейли может помочь вам.

Некоторые выдержки из man-страницы bash:

Когда bash вызывается как интерактивная оболочка входа или неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла, он ищет ~/.bash_profile, ~/.bash_login, а также ~/.profileв этом порядке, и читает и выполняет команды из первой, которая существует и доступна для чтения. --noprofile опция может использоваться, когда оболочка запущена, чтобы запретить это поведение.

...

Когда запускается интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из /etc/bash.bashrc а также ~/.bashrc, если эти файлы существуют. Это может быть запрещено с помощью --norc вариант. --rcfile опция файла заставит bash читать и выполнять команды из файла вместо /etc/bash.bashrc а также ~/.bashrc,

Может ли это объяснить, почему это "не работает для них"?

Вероятно, следует установить в ~/.bashrc если это не оболочка входа в систему, например, если они работают с терминалом в Gnome.

Кроме того, вы перечислите файл как ./bash_profile но это не указывает, где находится этот файл (он говорит, что он находится в текущем каталоге). Я полагаю, вы имеете в виду /etc/bash_profile, Этот файл используется только для логинов или неинтерактивных оболочек.

Из вашего кода вы можете сделать:

if [ x"$MYVAR" = "x" ]
    then
    echo "it didn't work"
    exit 1
fi
echo "it did work: $MYVAR"

если вы устанавливаете его из чего-то вроде собственного.bash_login или.bashrc пользователя, они выходят из своего окружения?

Экспорт переменной будет работать только в том случае, если последующее использование этой переменной зависит от экспорта; т. е. экспорт во время процесса входа в систему должен работать для всего, что они запускают, если только они не su/sudo, и в этом случае они фактически покидают эту среду и затем выполняют то, что делают.

jjujuma

Сначала убедитесь, что пользователь использует bash. Возможно, он / она использует csh. Если вы хотите, чтобы он был установлен только для этого пользователя, и он использует bash / sh, вам нужно поместить его в файл.bashrc. Если csh / tcsh, вам нужно поместить его в.cshrc /.tcshrc. Если вы хотите, чтобы он был установлен глобально для всех пользователей, то / etc / profile и /etc/csh.cshrc для bash / tcsh с уважением помогут вам начать работу!

НТН

Другие вопросы по тегам