Как установить переменную окружения для всех пользователей, даже когда выполняете 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

так что это правильное место для добавления переменных, эффективных для всех пользователей.

Другие вопросы по тегам