Как можно гарантировать, что переменная среды установлена для пользователя? у меня есть
MYVAR=whatever
export MYVAR
в ~ / .bash_profile, но отчет пользователя предполагает, что это не сработало для них. Что могло случиться?
Некоторые выдержки из справочной страницы bash:
Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login, она сначала считывает и выполняет команды из файла.
/etc/profile
, если этот файл существует. После прочтения этого файла он ищет~/.bash_profile
,~/.bash_login
, и~/.profile
, в этом порядке, и считывает и выполняет команды из первой, которая существует и доступна для чтения. В--noprofile
опция может использоваться при запуске оболочки, чтобы запретить это поведение....
При запуске интерактивной оболочки, которая не является оболочкой входа в систему, bash читает и выполняет команды из
/etc/bash.bashrc
и~/.bashrc
, если эти файлы существуют. Это можно предотвратить, используя--norc
вариант. В--rcfile
Параметр файла заставит bash читать и выполнять команды из файла вместо/etc/bash.bashrc
и~/.bashrc
.
Может ли это объяснить, почему это «не работает для них»?
Используйте модуль PAM под названием pam_env
для установки переменных среды при входе в систему. Если вы воспользуетесь этим решением, переменные среды будут доступны и для программ с графическим интерфейсом, запускаемых непосредственно из «Диспетчера окон» (например, GNOME, KDE), а не только для программ, запускаемых с терминала. Также пользователь может использовать другую оболочку, а не только Bash. Может быть этот статья от O'Reilly может вам помочь.
Из вашего кода вы можете:
if [ x"$MYVAR" = "x" ]
then
echo "it didn't work"
exit 1
fi
echo "it did work: $MYVAR"
если вы устанавливаете его из чего-то вроде собственного .bash_login или .bashrc пользователя, выходят ли они sudo из своей среды?
Экспорт переменной будет работать только в том случае, если последующее использование этой переменной зависит от экспорта; то есть экспорт во время их процесса входа в систему должен работать для всего, что они запускают, если только они не su / sudo, и в этом случае они фактически покидают эту среду, а затем выполняют все, что они делают.
Вероятно, это должно быть установлено в ~/.bashrc
если это не оболочка входа в систему, например, если они запускают терминал в Gnome.
Кроме того, вы указываете файл как ./bash_profile
но это не указывает на то, где находится этот файл (он говорит, что он находится в текущем каталоге). Я полагаю вы имеете в виду /etc/bash_profile
. Этот файл используется только для оболочек входа или неинтерактивных.
Jjujuma
Сначала убедитесь, что пользователь использует bash. Он / она может использовать csh. Если вы хотите, чтобы он был установлен только для этого пользователя, и они используют bash / sh, вам нужно поместить его в файл .bashrc. Если csh / tcsh, вам нужно поместить его в .cshrc / .tcshrc. Если вы хотите, чтобы он был установлен глобально для всех пользователей, / etc / profile и /etc/csh.cshrc для bash / tcsh с уважением заставят вас встать и начать!
HTH