'qual qmake' retorna valor, mas 'sudo qual qmake' não

1

Então, estou tentando instalar um programa, gnuradio, na minha pasta / opt. Para instalá-lo, preciso executar meus comandos como sudo. Ao instalar, recebo o seguinte erro: /bin/sh: qmake: command not found

Quando digito which qmake , recebo: /usr/lib64/qt4/bin/qmake

No entanto, quando executo sudo which qmake , obtenho: which: no qmake in (/sbin:/bin:/usr/sbin:/usr/bin)

Eu olhei para várias correções, mas não acho que elas abordem o mesmo problema que estou tendo. O guia mais próximo que encontrei do meu problema é aqui .

Para sua referência, estou no RHEL7.

    
por ajsmart 11.07.2017 / 18:47

2 respostas

4

É porque o sudo é executado somente dentro de secure_path definido em /etc/sudoers ou $PATH definido para sudo. Por exemplo, no meu sistema,

$ 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"

Então, você tem algumas soluções:

  1. Faça um link de /usr/lib64/qt4/bin/qmake para um dos secure_path , por exemplo:

    sudo ln -s /usr/lib64/qt4/bin/qmake /usr/bin/qmake
    
  2. Ou adicione /usr/lib64/qt4/bin em /etc/sudoers da seguinte forma:

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

    Na linha acima, mantenha o outro texto como está, apenas adicione seu caminho /usr/lib64/qt4/bin no final, conforme o exemplo.

por 11.07.2017 / 19:06
1

Por razões que devem ser óbvias, seu PATH não é herdado pelo shell de privilégios no qual sudo executa seus comandos. Você pode aliviar isso fornecendo o caminho completo para qmake (por exemplo, sudo $(which qmake) ) ou colocando sua chamada em qmake em um script que define seu próprio PATH e que você invoca com sudo /path/to/my/qmake-script.sh .

    
por 11.07.2017 / 18:49

Tags