sudo-Umgebung: „g++: Befehl nicht gefunden“

sudo-Umgebung: „g++: Befehl nicht gefunden“

Ich habe eine relativ neue RHEL 6.5-Installation, auf der ich GCCC 4.9 aus der Quelle installiert habe. Nachdem ich GCC 4.9 installiert hatte, deinstallierte ich die von der Distribution bereitgestellte ältere GCC-Version über:

sudo yum remove gcc

GCCerscheintmuss korrekt installiert und für Benutzer und sichtbar sein root, aber wenn ich versuche, einen sudoBefehl einzugeben, der den Compiler benötigt, kann er nicht gefunden werden.

Mir scheint, dass das nicht auf „während“ PATHverweist , aber ich verstehe nicht, warum.g++sudo

g++ist installiert in:

[john@haley boost_1_55_0]$ which g++
/usr/local/bin/g++

Und das Abrufen der Version als Benutzer und als rooterfolgreich:

[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.

Aber sudo g++ --versiones schlägt fehl:

john@haley boost_1_55_0]$ sudo g++ --version
[sudo] password for john: 
sudo: g++: command not found
[john@haley boost_1_55_0]$ 

Überprüfen des PATHals 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
                                                                             ^^^^^^^^^

... scheint darauf hinzudeuten, dass sich der Standort g++tatsächlich im Pfad befindet.

Warum schlägt dies fehl und was kann ich tun, um das Problem zu beheben?

Beantwortung von Fragen in Kommentaren:

ja, ich kann es mit expliziten Pfaden unter folgendem ausführen 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]$ 

Es wurde festgestellt, dass ich es falsch gemacht habe, als ich das überprüft habe sudo PATH. Wenn man es richtig macht, stellt man fest, dass es in der Tat so /usr/local/binistnichtin sudo's 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]$ 

Antwort1

Ich poste dies als Antwort, weil ich diese Lösung durch Kommentare zum OP entdeckt habe, aber ich bin nicht sicher, ob das das ist, was ichsollenTun.

Ich kann dies zum Laufen bringen, indem ich die einzuschließende Datei ausführe sudo visudound bearbeite .secure_path/usr/local/bin

Auf meinem System lautet die Originalzeile:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Ändern Sie es in:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

„behebt“ das Problem:

[john@haley boost_1_55_0]$ sudo 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]$ 

verwandte Informationen