![使用 sudo 运行时未找到 pyenv 命令](https://linux22.com/image/1178952/%E4%BD%BF%E7%94%A8%20sudo%20%E8%BF%90%E8%A1%8C%E6%97%B6%E6%9C%AA%E6%89%BE%E5%88%B0%20pyenv%20%E5%91%BD%E4%BB%A4.png)
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'