Как я могу убедиться, что переменная среды (например, GRAILS_HOME
) установлена, когда я sudo
?
Я поместил скрипт в /etc/profile.d
с этим значением и сделал его ugo+x
, Что мне нужно сделать, чтобы сделать это видимым для суперпользователя?
Попробуйте с
sudo su -
-
загружает все файлы среды. Из man su
:
-, -l, --login
Provide an environment similar to what the user would expect had
the user logged in directly.
When - is used, it must be specified as the last su option. The
other forms (-l and --login) do not have this restriction.
Обновление : В общем случае вы запускаете sudo -i mycomment
, как сказано в справочной странице sudo
,
-i [command]
The -i (simulate initial login) option runs the shell
specified in the passwd(5) entry of the target user as a
login shell. This means that login-specific resource files
such as .profile or .login will be read by the shell. If a
command is specified, it is passed to the shell for
execution. Otherwise, an interactive shell is executed.
sudo attempts to change to that user's home directory
before running the shell. It also initializes the
environment, leaving DISPLAY and TERM unchanged, setting
HOME, SHELL, USER, LOGNAME, and PATH, as well as the
contents of /etc/environment on Linux and AIX systems. All
other environment variables are removed.
За этот ответ: Установка PATH, чтобы она применялась ко всем пользователям, включая root / sudo , если вы заметили, что Sudo сбрасывает все переменные и путь по умолчанию.
Соответствующий бит:
Страница руководства для sudoers
гласит:
blockquote>env_reset If set, sudo will reset the environment to only contain the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_* variables. Any variables in the caller's environment that match the env_keep and env_check lists are then added. The default contents of the env_keep and env_check lists are displayed when sudo is run by root with the -V option. If the secure_path option is set, its value will be used for the PATH environment variable. This flag is on by default.
Таким образом, вы можете сделать следующее для поддержания переменных при использовании sudo
sudo visudo
это откроет вам настройки sudo. Затем, согласно тому, что я сделал, вы добавили следующее ниже
Defaults secure_path="blah"
Defaults env_keep +="VARIABLE VARIABLE VARIABLE"
(ИСКЛЮЧАЯ ПУТЬ, как это установлено secure_path), и это всего лишь один пробел между каждой переменной, если вы хотите, чтобы поддерживалось более 1.
и это говорит sudo, какие переменные env следует хранить, а не игнорировать.
Когда закончите, удерживайте Ctrl и нажмите o, чтобы записать, нажмите ввод и скажите «да», чтобы сохранить [даже если он указывает файл tmp, все в порядке, он будет записан обратно в основную конфигурацию, просто скажите «да», когда вас спросят, хотите ли вы перезаписать ].
Это должно позволить вам поддерживать любые переменные, которые вы пожелаете (большая - JAVA_HOME, а также http_proxy, если вы используете прокси).
Таким образом, он должен выглядеть примерно так, как указано ниже, включая указанную вами переменную:
Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin" Defaults env_keep +="GRAILS_HOME"
и проверить, что он выходит из любых открытых окон терминала и снова открывает одно и запускает
echo $GRAILS_HOME
Это должно быть то, что вы установили, теперь выпустите
sudo echo $GRAILS_HOME
, и теперь оно должно остаться без изменений