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_path
opção estiver configurada, seu valor será usado para a PATH
variá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 PATH
variá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_group
opçã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 visudo
e 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_path
opções).
Ou, para passar PATH
temporariamente 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 sudo
preservar $PATH
?
Outro motivo pelo qual o ambiente pode ser diferente sudo
é porque você pode ter a env_reset
opção ativada no seu sudoers
arquivo. Isso faz com que os comandos sejam executados com um ambiente novo e mínimo.
Portanto, você pode usar a env_keep
opçã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"