Как установить переменную окружения для всех пользователей, даже когда выполняете sudo su?
Я создал файл с именем x.sh
в каталоге /etc/profile.d/
поэтому он должен быть доступен всем пользователям. Я ожидал, когда я изменю текущего пользователя в терминале (вошедшего в систему пользователя) с помощью команды sudo su other_user
те переменные, которые я установил в x.sh
файл должен быть доступен, но они нет. Как я могу установить переменные, чтобы быть доступным, как я хотел?
2 ответа
/etc/profile
(и поэтому /etc/profile.d
) читается для логинов. sudo su other_user
не запускается оболочка входа Это плохая практика, она оставляет окружающую среду загрязненной переменными от первоначального пользователя. Вместо этого вы должны выполнить одну из следующих команд:
sudo -iu other_user
sudo su - other_user
Обе эти нагрузки /etc/profile
потому что они запускают оболочки входа в систему, и оба начинают с относительно чистой среды.
В идеале, однако, переменные должны быть установлены в /etc/environment
если возможно. Этот файл должен быть прочитан su
, поэтому переменные будут доступны независимо от того, запущена ли оболочка входа в систему. Однако этот файл не поддерживает синтаксис оболочки, поэтому, если вам нужен сложный код оболочки для установки переменных, вы не сможете его использовать.
Далее Как установить постоянные переменные среды · U&L bash
будет загружать
/etc/profile
так что это правильное место для добавления переменных, эффективных для всех пользователей.