Ви можете перевірити, чому (це інше), запустивши 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. Якщо ви не довіряєте людям, які керують судо, щоб мати здоровий звук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"