所以我试图在我的 /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"
因此,您有几个解决方法:
/usr/lib64/qt4/bin/qmake
要么建立一个 ie之一的链接,secure_path
如下所示:sudo ln -s /usr/lib64/qt4/bin/qmake /usr/bin/qmake
或者添加
/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
。