14

Jarファイルを実行するLinuxボックスにbashスクリプトがあります。通常のユーザーとしてログインすると、スクリプトを実行する権限がありませんが、次のログが出力されます。

*INFO * Using JVM found at /opt/jdk6/bin/java

ただし、Sudoでスクリプトを使用しようとすると、次のようになります。

*ERROR* Unable to locate java, please make sure java is installed and JAVA_HOME set

JAVA_HOME上記と同じパスを設定しました—で表示でき、echo $JAVA_HOMEスクリプト内のオプションとしても設定されています。スクリプトが問題ではないことを嬉しく思います。これはデフォルトのCQ5制御スクリプトであり、他の何十ものボックスで問題なく使用しています。上記で何が間違っているのかわからないので、Linuxのセットアップで欠けているものだと思いますか?

コマンドを実行すると、自分で設定したsudoコマンドにアクセスできますか?JAVA_HOME

4

3 に答える 3

32

デフォルトでsudoは、生成されたコマンドの環境をクリーンアップします。それを維持するために渡す-E

sudo -E env

比較対象:

sudo env
于 2012-07-13T11:13:30.197 に答える
1

「sudo-E」は、JAVA_HOMEがエクスポートされなかった場合の問題を解決しませんでした。また、エクスポートされた場合、-Eを指定しない「sudo」も同じように機能します。

したがってexport JAVA_HOME=.../jdk<version>、.bash_profileファイルと.bashrcファイルを追加できます。

.bash_profileと.bashrcの違いがわからない場合は、ログイン時に.bash_profileが実行されます(たとえば、診断/ウェルカム情報を表示します)。.bash_rcは、新しいターミナルを開くと実行されます(たとえば、shift-ctrl-T)。

両方の場合にいくつかのコマンドを実行するために、それを.bashrcファイルに入れて、.bash_profile source .bashrc:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi
于 2014-05-21T18:55:42.670 に答える
-1

次のように、いつでも明示的にJavaに渡すことができます。

sudo java -Djava.home=$JAVA_HOME Test

于 2015-03-06T21:01:50.660 に答える