'which qmake' 返回值,但 'sudo which qmake' 不返回值

'which qmake' 返回值,但 'sudo which qmake' 不返回值

所以我试图在我的 /opt 文件夹中安装一个程序 gnuradio。为了安装它,我需要以 sudo 身份执行命令。安装时,我收到以下错误:/bin/sh: qmake: command not found

当我输入时which qmake我得到:/usr/lib64/qt4/bin/qmake

然而,当我跑步时sudo which qmake我得到:which: no qmake in (/sbin:/bin:/usr/sbin:/usr/bin)

我查看了各种修复方案,但我认为它们没有解决我遇到的同一问题。我能找到的最接近我的问题的指南是这里

仅供参考,我使用的是 RHEL7。

答案1

这是因为 sudo 仅在sudosecure_path定义的/etc/sudoers$PATH设置的范围内运行。例如,在我的系统中,

$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

$ sudo cat /etc/sudoers | grep secure_path
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

因此,您有几个解决方法:

  1. /usr/lib64/qt4/bin/qmake要么建立一个 ie之一的链接,secure_path如下所示:

    sudo ln -s /usr/lib64/qt4/bin/qmake /usr/bin/qmake
    
  2. 或者添加/usr/lib64/qt4/bin如下/etc/sudoers

    Defaults    secure_path="sbin:/bin:/usr/sbin:/usr/bin:/usr/lib64/qt4/bin"
    

    在上面的行中,保留其他文本不变,仅/usr/lib64/qt4/bin在末尾添加您的路径,如示例所示。

答案2

由于显而易见的原因,您的PATH权限不会被sudo执行其命令的特权 shell 继承。您可以通过提供qmake(例如)的完整路径sudo $(which qmake)或将您的调用放入qmake设置其自己的脚本PATH并使用 来调用来缓解这种情况sudo /path/to/my/qmake-script.sh

相关内容