Eu tenho uma instalação relativamente nova do RHEL 6.5, na qual instalei a partir da fonte GCCC 4.9. Depois de instalar o GCC 4.9, desinstalei a versão mais antiga do GCC fornecida pela distribuição:
sudo yum remove gcc
O GCC aparece para ser corretamente instalado e visível para ambos os usuários e root
, mas quando tento emitir um comando sudo
que precisa do compilador, ele não pode ser encontrado.
Parece-me que PATH
não aponta para g++
durante sudo
, mas não entendo o porquê.
g++
está instalado em:
[john@haley boost_1_55_0]$ which g++
/usr/local/bin/g++
E obtendo a versão como usuário e como root
é bem-sucedido:
[john@haley boost_1_55_0]$ g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[john@haley boost_1_55_0]$ sudo su -
root@haley /root # g++ --version
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Mas sudo g++ --version
falha:
john@haley boost_1_55_0]$ sudo g++ --version
[sudo] password for john:
sudo: g++: command not found
[john@haley boost_1_55_0]$
Verificando o PATH
como sudo
:
[john@haley boost_1_55_0]$ sudo echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/home/john/bin:/usr/local/bin
^^^^^^^^^
... parece indicar que a localização de g++
está realmente no caminho.
Por que isso está falhando e o que posso fazer para corrigir isso?
Responder a perguntas nos comentários:
sim, posso executá-lo usando caminhos explícitos em sudo
:
[john@haley boost_1_55_0]$ sudo /usr/local/bin/g++ --version
[sudo] password for john:
g++ (GCC) 4.9.0
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[john@haley boost_1_55_0]$
Foi observado que eu estava fazendo errado ao verificar o sudo PATH
. Fazer isso da maneira correta revela que, de fato, /usr/local/bin
não é em sudo
' PATH
:
[john@haley boost_1_55_0]$ sudo env | grep PATH
13:PATH=/sbin:/bin:/usr/sbin:/usr/bin
[john@haley boost_1_55_0]$