如何添加/修改 sudo 的 PATH?

如何添加/修改 sudo 的 PATH?

我安装了两个版本的 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 的评论),以修复可读性并添加信息。

这绝对是一个sudoGNU/Linux问题,而不是一个Python问题。

运行时与以用户身份登录并在命令行中键入内容sudo foo arg1 arg2并不完全相同。请注意,有些可执行文件不允许 sudo 用户运行或执行某些操作,并且环境变量与您使用 的环境不同。有些是添加的(例如,,等),有些会完全缺失,有些会被修改。您可以通过运行来查看有什么不同rootfoo arg1 arg2sudoSUDO_COMMANDSUDO_USERdiff <(env) <(sudo env)

sudo您可以使用该标志来保留您运行的 shell 中的大多数变量--preserve-env

此外,my_userbash shell 将对第一项(即须藤sudo foo arg1 arg2,而不是第二个()。因此,如果foo也是别名,它将不会被扩展,因此以 身份运行的子进程root将尝试foo以文字形式运行,而不foo是以您在 下创建的别名形式运行。“修复”您的问题的最简单方法是定义一个带有尾随空格的my_user别名:sudo

    alias='sudo '

正如解释的那样这里,这将导致后面的内容sodo也被别名扩展 将其发送到子shell运行。

相关内容