Вы можете проверить, почему (это отличается), запустив 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"