04 在 WSL 下。即使使用 sudo 的 PATH,我的 PATH 中也有 pyenv 的二进制文件,但由于某种原因,我无法使用 sudo 运行它。
test@pc:~$ which pyenv
/home/test/.pyenv/bin/pyenv
test@pc:~$ sudo which pyenv
test@pc:~$ sudo echo $PATH | perl -p -e 's/:/\n/g' | grep pyenv
/home/test/.pyenv/plugins/pyenv-virtualenv/shims
/home/test/.pyenv/shims
/home/test/.pyenv/bin
我尝试过了
sudo -i
sudo -E
使用 pyenv 不起作用。没有 sudo 也可以正常工作,但由于权限问题,我无法安装 python。我做错了什么?
答案1
出于安全原因,sudo
使用其自己的文件来定位程序secure_path
,定义在/etc/sudoers/
:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
还要注意,执行 时sudo echo $PATH
,$PATH
变量在传递给 sudo 之前会由用户的 shell 展开。要使用 sudo 查看 root 的路径,你需要执行类似以下操作sudo bash -c 'echo $PATH'