Для создания персистентных переменных среды я добавляю файл сценария к/etc/profile.d каталогу, например:
# my script export MY_VAR=var_value
Это работает правильно на текущего пользователя:
alex@alex-64:~$ echo $MY_VAR var_value
Теперь мне нужны те же переменные среды для пользователя root, но/etc/profile.d сценарий не работает на корень:
alex@alex-64:~$ echo $MY_VAR var_value alex@alex-64:~$ sudo su root@alex-64:/home/alex# echo $MY_VAR root@alex-64:/home/alex#
Как я могу установить те же переменные для корня?
sudo обычно не сохраняет локальные переменные среды. Для этого вы должны использовать его с переключателем -E
, то есть sudo -E su
сохранит $ MYVAR для root.
В качестве альтернативы, чтобы создать постоянные переменные, которые действительно являются общесистемными, вы должны установить их в / etc / environment
.
Как и процесс определения собственной переменной окружения, например, редактируя '~/.bashrc', можно определить переменную окружения root, отредактировав '/root/.bashrc'.
По умолчанию env_reset
в / etc / sudoers
сбросит PATH
root, определенный в / etc / environment
.
Вы можете изменить его на По умолчанию! env_reset
, чтобы отключить сбросить или добавить:
Defaults secure_path="my/custom/path:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
Переменные среды можно передавать с помощью флага env
. Мне всегда нужно обходить прокси, и это постоянная проблема для меня. Особенно, когда вам нужно передать PATH
и переменные среды прокси.
Команда:
sudo env "ENV=$ENV1" "ENV2=$ENV2" [command]
И вы можете добавить его как псевдоним (добавьте этот .bashrc
, . bash_aliases
или .zshrc
и т.д.).
Пример моего псевдонима:
alias psudo='sudo env "PATH=$PATH" "HTTP_PROXY=$HTTP_PROXY" "HTTPS_PROXY=$HTTPS_PROXY" "http_proxy=$http_proxy" "https_proxy=$http_proxy"'
Имейте в виду, что это явно снижает безопасность sudo.