に JDK をインストールし/opt
、 にシェル スクリプトを配置して、/etc/profile.d/
PATHexport
変数を変更して Java をうまく実行できるようにしました。問題は、これがローカル アカウントでのみ機能し、 では機能しなかったことです。コマンドsudo
を実行しようとすると、 と表示されます。 コマンドをおよびの末尾に配置しようとしましたが、どちらのオプションでもこの動作は変わらないようです。 を実行できるようにしたいのですが、 が を認識するように起動時に PATH を変更できる場所はどこですか?sudo
sudo: java: command not found
export
.bashrc
rc.local
sudo java
sudo
編集: 記録のために、私が試みたすべての場所に追加した行は次のとおりです。
export JAVA_HOME="/opt/jdk-16.0.2"
export PATH="$PATH:${JAVA_HOME}/bin"
答え1
あなたの問題は、全員、あるいは誰でも=root ということではありません。あなたの問題はsudo
独自の PATH を使用するためですsudo
。呼び出し元のシェルで設定された PATH や他のシェルまたはシェル設定は使用しません (sudo -i
通常の「ログイン」設定でターゲット ユーザーのシェル (デフォルトのルート) を実行する を使用しない限り)。ユーザーが制御できる PATH を使用すると、セキュリティが破られる可能性があり、sudo の存在理由全体に違反する可能性があるためです。
sudoコマンドのパスを設定する方法
`sudo env "PATH=$PATH"` はなぜ何かを実行するのでしょうか?
sudo 経由で PATH を渡す
sudo ユーザーとしての PATH 変数の問題
最も直接的な解決策は、実行したいプログラムのフルパス名を使用することです。入力する代わりに、次のようにすることができます。
sudo $(which java) # or maybe $(type -p java) in bash
Javaを検索するあなたのシェルのPATHは、sudoを次のように呼び出します。結果。