sudo 環境: "g++: コマンドが見つかりません"

sudo 環境: "g++: コマンドが見つかりません"

私は比較的新しい RHEL 6.5 をインストールしており、そこにソースから GCCC 4.9 をインストールしました。GCC 4.9 をインストールした後、ディストリビューションが提供する古い GCC バージョンを次の方法でアンインストールしました。

sudo yum remove gcc

湾岸協力会議登場正しくインストールされ、ユーザーと の両方に表示されるはずrootですが、コンパイラを必要とするコマンドを発行しようとするとsudo、コンパイラが見つかりません。

はduringPATHを指していないように思われますが、その理由がわかりません。g++sudo

g++インストールされている場所:

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

そして、ユーザーとしてバージョンを取得し、root成功します。

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

しかしsudo g++ --version失敗します:

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

PATH次のようにチェックします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
                                                                             ^^^^^^^^^

... の場所がg++実際にパス内にあることを示しているようです。

なぜ失敗するのでしょうか? また、これを修正するにはどうすればよいでしょうか?

コメントでの質問への回答:

はい、以下の明示的なパスを使用して実行できます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]$ 

をチェックする際に間違ったやり方をしていたことが観察されましたsudo PATH。正しいやり方でやると、実際に/usr/local/binないの:sudoPATH

[john@haley boost_1_55_0]$ sudo env | grep PATH
13:PATH=/sbin:/bin:/usr/sbin:/usr/bin
[john@haley boost_1_55_0]$ 

答え1

私はこれを回答として投稿しています。なぜなら、私はOPのコメントを通じてこの解決策を発見したからです。しかし、これが私が望んでいたことかどうかはわかりません。すべきする。

sudo visudoを実行し、secure_pathを含めるように編集することで、これを機能させることができます/usr/local/bin

私のシステムでは、元の行は次のようになります。

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

次のように変更します:

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

問題を「修正」します:

[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]$ 

関連情報