Você está ficando confuso entre o PATH
que está no ambiente de execução sudo
real e o PATH
que sudo
define no ambiente do programa que ele executa. Do manual sudo
:
When sudo runs a command, it calls fork(2), sets up the execution environment as described above, and calls the execve system call in the child process.
Com execve
, você especifica o ambiente que deseja que o processo filho tenha, isto é, pode ser diferente do processo pai.
Frequentemente, secure_path
será definido em /etc/sudoers
:
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 isso estiver definido, sudo
pesquisará o comando neste PATH
e definirá isso no ambiente do comando executado. Ele também aparecerá na saída de sudo sudo -V
com uma linha como:
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
No entanto, no seu caso, isso não está definido, portanto, sudo
usará o PATH
em seu próprio ambiente de execução (que, nesse caso, é herdado do shell pai). Embora tenha sido configurado para ignorar o diretório atual, se isso foi colocado no PATH
:
Ignore '.' in $PATH
Como env_reset
é em /etc/sudoers
(e PATH
não está na string env_keep
), os conjuntos PATH
that sudo
no comando chamado serão ser definido por PAM
ou por /etc/environment
e, portanto, é diferente do PATH
sudo
usado para procurar sua localização:
By default, the env_reset option is enabled. This causes commands to be executed with a new, minimal environment. On AIX (and Linux systems without PAM), the environment is initialized with the contents of the /etc/environment file. The new environment contains the TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME and SUDO_* variables in addition to variables from the invoking process permitted by the env_check and env_keep options.
Para executar o python
no PATH
definido por sudo
, você deve fazer algo assim:
sudo env python -V
Dessa forma, não é sudo
que está procurando o comando, mas env
terá o ambiente definido por sudo
e env
procurará o comando lá.