Как я могу убедиться, что переменная окружения установлена для пользователя в сеансе 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 с уважением помогут вам начать работу!
НТН