我安装了两个版本的 Python。
- Python 2.7.14 中的
/usr/local/bin
- Python 2.7.5 中
/usr/bin
。
当我输入时# python
,它使用版本2.7.14
,但是当我输入时sudo python
,它使用版本2.7.5
。我怎样才能sudo python
指向版本2.7.14
?
在 的输出中sudo env | grep PATH
,/usr/local/bin
出现在 之前/usr/bin
但它仍然从 中拾取 Python /usr/bin
。
PATH=/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
当我输入sudo su
进入根 shell 时,它会给我,python 2.7.14
但是在同一会话中如果我输入sudo python
,它会给我python 2.7.5
。
我经历了这个问题但接受的答案并没有回答如何确保 sudo 使用正确的路径。
安全路径如下所示:
secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
答案1
编辑是因为 sudo 不会自动启动 shell(根据 Dave Thompson 的评论),以修复可读性并添加信息。
这绝对是一个sudo
与GNU/Linux
问题,而不是一个Python
问题。
运行时与以用户身份登录并在命令行中键入内容sudo foo arg1 arg2
并不完全相同。请注意,有些可执行文件不允许 sudo 用户运行或执行某些操作,并且环境变量与您使用 的环境不同。有些是添加的(例如,,等),有些会完全缺失,有些会被修改。您可以通过运行来查看有什么不同root
foo arg1 arg2
sudo
SUDO_COMMAND
SUDO_USER
diff <(env) <(sudo env)
sudo
您可以使用该标志来保留您运行的 shell 中的大多数变量--preserve-env
。
此外,my_user
bash shell 将对第一项(即须藤)sudo foo arg1 arg2
,而不是第二个(富)。因此,如果foo
也是别名,它将不会被扩展,因此以 身份运行的子进程root
将尝试foo
以文字形式运行,而不foo
是以您在 下创建的别名形式运行。“修复”您的问题的最简单方法是定义一个带有尾随空格的my_user
别名:sudo
alias='sudo '
正如解释的那样这里,这将导致后面的内容sodo
也被别名扩展 前将其发送到子shell运行。