私の問題に関連しているように思われるサイト上のいくつかの質問がありますが、私はそれらのどれにも解決策を見つけることができませんでした。
私のオペレーティングシステムはUbuntu 12.04です。 mvn
を/tools/noarch/Apache-maven-3.1.1
にインストールし、/etc/profile
の最後に次の行を追加しました。
export M2_HOME=/tools/noarch/Apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
その後、source /etc/profile
を実行します。
mvn --version
を実行するとコマンドが成功し、mvn
実行可能ファイルが見つかります。Sudo mvn --version
を実行すると、出力がSudo: mvn: command not found
になります。 PATH
を使用してコマンドを実行するとSudo
が異なる可能性があることを私は知っています。そのため、これを試しました。
$>Sudo echo $PATH
/tools/noarch/Apache-maven-3.1.1/bin:... some other stuff ...
私が試したもう1つのことは、Sudo su -
を実行してからmvn --version
を入力することです。この場合、mvn
が正常に見つかり、コマンドが成功します。ここで何が起こっているの?
$PATH
はあなたのシェルによって評価されるので、あなたのチェックは期待通りには動きません。
/etc/sudoers
はあなたのPATH
をデフォルトのものに置き換えるように設定されています。
Sudo
は、コマンドを実行する前にログインシェル環境をロードしないため、/etc/sudoers
のデフォルトのPATH
が使用されます。 su -
はログインシェルを開きます。これは/etc/profile
のロードを含みます。 man bash
、sectionINVOCATIONを参照してください。
/etc/sudoers
のPATH
resetを削除するだけです。おそらくsecure_path
というルールです。
CentOSでは、PATH
をDefaults env_keep
セクションに追加することができます。
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY PATH"
現在のSudo
にPATH
を渡します。
Sudo env "PATH=$PATH" your_command
@opyateの答えを詳しく説明しますが、次のシェルスクリプトを使用しています(たとえば、mysudo
という名前の場合があります)。
#!/bin/bash
Sudo -E env "PATH=$PATH" "$@"
-E
は、Sudo
に環境を保持するように指示します。env "PATH=$PATH"
はSudo
呼び出しの外側に展開され、外部PATH
をSudo
内でも使用可能にします(これは、-E
に加えてPATH
は通常、環境全体が受ける治療に加えて、特別な治療を受けます。"$@"
は、スクリプトが受け取る引数をSudo
行に渡します。スクリプトをPATH
のディレクトリにあるファイルに保存し、+x
パーミッションを付与します。
現在の答えは少しあいまいなので、パスを変更する/etc/sudoers
の特定の設定はsecure_path
です。
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
あなたはそれをSudo visudo
で修正することができます、あるいはもっと良いことに、あなたが必要とするディレクトリを追加してください:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
Maven を最初にインストールしたときにも同じ問題がありました。 2行追加したところ、問題は解決しました。
export M2_HOME=/tools/noarch/Apache-maven-3.1.1
export PATH=$M2_HOME/bin:$PATH
4つのファイルに:
/root/.bashrc
/root/.profile
そして現在のユーザー(mehran
は私のUbuntuのユーザー名です):
/home/mehran/.bashrc
/home/mehran/.profile
RootのPATH変数を自分で行ったのとまったく同じようにつまり、/root/.bashrcにあるSudoのプロファイルにこれらの2行を追加して、それをソースとして追加する必要があります。