2

На странице руководства sudo я нашел опцию -H , но я не понимаю, как она работает. На странице написано:

Опция -H (HOME) устанавливает переменную среды HOME равной homedir целевого пользователя (по умолчанию root), как указано в passwd (5).

В моем понимании следующего не должно происходить:

root $ sudo -u sztomi -H echo $HOME
/root

Но вместо этого он должен вывести /home/sztomi который является домашним каталогом пользователя sztomi.

Как я могу сделать это правильно?

2 ответа2

4

Вы не указали $HOME , поэтому текущее значение подставляется до выполнения команды sudo . Окружите его одинарными кавычками (') .


РЕДАКТИРОВАТЬ:

Как мы заметили (см. Комментарии), sudo не вызывает subshell для запуска данной команды (поэтому нет оболочки, расширяющей $HOME). Пересмотренная команда будет:

 sudo -u sztomi -H bash -c 'echo $HOME'

Объяснено: sudo переключает идентификатор пользователя, а затем вызывает оболочку bash которая, в свою очередь, принимает echo $HOME , заменяет переменную HOME ее значением и, наконец, выполняет команду echo .

Обратите внимание, что вызов subshell необходим в этом примере только для подстановки переменной HOME после того, как sudo переключил идентификатор пользователя. Это не обязательно, если вы просто хотите запустить одну программу без подстановки переменных в целевой среде.

0

Вы должны быть в состоянии использовать ~ sztomi, чтобы получить переменную окружения.

Например, это перечислит содержимое к домашнему каталогу sztomi.

sudo -u sztomi ls ~sztomi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .