Você pode verificar o porquê (é diferente) executando sudo sudo -V.
Por exemplo, no Linux, execute:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Nota: no MacOS / BSD, basta executar: sudo sudo -V.
A lista acima é restrita devido ao plug-in de diretiva de segurança padrão em algumas distribuições do Linux.
Isso é explicado em man sudoers:
Se a secure_pathopção estiver configurada, seu valor será usado para a PATHvariável de ambiente.
secure_path- Caminho usado para todos os comandos executados no sudo. Se você não confia que as pessoas que executam o sudo tenham uma PATHvariável de ambiente sã , convém usar isso.
Outro uso é se você deseja que o "caminho raiz" seja separado do "caminho do usuário". Os usuários do grupo especificado pela exempt_groupopção não são afetados por secure_path. Esta opção não está configurada por padrão.
Se for esse o caso, você pode alterar isso executando sudo visudoe editando o arquivo de configuração e modificando seu secure_path(adicionando caminho extra separado por :) ou adicione seu usuário exempt_group(para não ser afetado pelas secure_pathopções).
Ou, para passar PATHtemporariamente ao usuário , você pode executar:
sudo env PATH="$PATH" my_command
e você pode verificar isso:
sudo env PATH="$PATH" env | grep ^PATH
Veja também: Como fazer sudopreservar $PATH?
Outro motivo pelo qual o ambiente pode ser diferente sudoé porque você pode ter a env_resetopção ativada no seu sudoersarquivo. Isso faz com que os comandos sejam executados com um ambiente novo e mínimo.
Portanto, você pode usar a env_keepopção (não recomendada por razões de segurança ) para preservar as variáveis de ambiente do usuário:
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"