Você pode verificar por que (é diferente) pelo seguinte comando:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
como por padrão plugin de política de segurança em algumas distribuições Linux.
Isso é explicado em mais detalhes em man sudoers
:
If the secure_path
option is set, its value will be used for the PATH
environment variable.
secure_path
- Path used for every command run from sudo. If you don't trust the people running sudo to have a sane PATH
environment variable you may want to use this.
Another use is if you want to have the “root path” be separate from the “user path”. Users in the group specified by the exempt_group
option are not affected by secure_path
. This option is not set by default.
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 adicionando seu usuário em exempt_group
(assim você ganhou pode ser afetado por secure_path
opções).
Ou para passar o PATH
temporário do usuário, você pode executar:
sudo env PATH="$PATH" my_command
e você pode verificar isso por:
sudo env PATH="$PATH" env | grep ^PATH
Veja também: Como tornar sudo
preserve $PATH
?
Outra razão pela qual o ambiente pode ser diferente para sudo
, é porque você pode ter a opção env_reset
ativada em seu arquivo sudoers
. Isso faz com que os comandos sejam executados com um novo ambiente mínimo.
Portanto, você pode usar a opção env_keep
(não recomendada para motivos de segurança ) para preservar as variáveis de ambiente do usuário :
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"