Вы можете проверить, почему (это отличается), запустив sudo sudo -V
.
Например, в Linux запустите:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Примечание: В MacOS / BSD, просто запустите: sudo sudo -V
.
Приведенный выше список ограничен из-за плагина политики безопасности по умолчанию в некоторых дистрибутивах Linux.
Это дополнительно объясняется в man sudoers
:
Если secure_path
опция установлена, ее значение будет использоваться для PATH
переменной среды.
secure_path
- Путь, используемый для каждой команды, запускаемой из sudo. Если вы не доверяете людям, работающим с sudo, иметь PATH
переменную среды, вы можете использовать это.
Другое использование, если вы хотите, чтобы «корневой путь» был отделен от «пути пользователя». Пользователи в группе, указанной exempt_group
параметром, не затрагиваются secure_path
. Эта опция не установлена по умолчанию.
В этом случае вы можете изменить это, запустив sudo visudo
и отредактировав файл конфигурации и изменив свой secure_path
(добавив дополнительный путь, разделенный :
) или добавив в него своего пользователя exempt_group
(чтобы параметры не влияли на вас secure_path
).
Или, чтобы пропустить PATH
временный пользователь , вы можете запустить:
sudo env PATH="$PATH" my_command
и вы можете проверить это:
sudo env PATH="$PATH" env | grep ^PATH
Смотрите также: Как сделать sudo
консерв $PATH
?
Другая причина, по которой среда может отличаться sudo
, заключается в том, что env_reset
в вашем sudoers
файле может быть включена опция . Это заставляет команды выполняться в новой, минимальной среде.
Таким образом, вы можете использовать env_keep
опцию (не рекомендуется из соображений безопасности ), чтобы сохранить переменные окружения вашего пользователя:
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"