当我执行时
which pip3
它指向
/usr/.../anaconda3/bin/pip3
然而,当我跑步时
sudo which pip3
结果是
/usr/bin/pip3
这个问题从何而来,我该如何实现这sudo pip
一点呢/usr/.../anaconda3/bin/pip3
?
答案1
sudo
在运行任何命令之前清理环境。这样做时,如果设置了指令的值secure_path
,它将被用作PATH
命令的sudo
,而不是当前的PATH
。
在我的系统中:
% sudo grep -E 'secure_path' /etc/sudoers
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
所以我有:
% echo $PATH
/home/foobar/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
% sudo bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
您可以采取哪些措施来保留当前路径或添加/usr/.../anaconda3/bin
到:sudo
PATH
传入命令
PATH
的环境which
:sudo PATH="$PATH" which pip3
PATH
也可以设置任何所需的。运行时保持当前环境
sudo
:sudo -E which pip3
通过在前面放置一个来禁用该
secure_path
值#
或删除该行以保留当前的PATH
:# Defaults secure_path="....."
相反,您也可以修改它
secure_path
以添加/usr/.../anaconda3/bin
,一开始。添加
PATH
到env_keep
指令以保持PATH
在sudo
提供的环境中:Defaults env_keep += "PATH"