MacOSでsudoの環境変数を設定するには?

MacOSでsudoの環境変数を設定するには?

私のコンピュータにServiceMixをインストールして起動しようとしています。起動スクリプトはstart.shと呼ばれます。これにより、./start.sh「権限が拒否されました」というメッセージが表示されます。だから私はそれを使用し、sudo ./start.shサーバーが正常に起動しました。

ところで(いくつかの理由で)Java 6を使いたいのですが、Java 7を使用しているようです。私はstart.shスクリプトを見て、このJAVA_HOME変数を使うことを発見しました。そのため、JAVA_HOMEをJDK 6ディレクトリに設定しました。

ただし、ServiceMixはまだJava 7を使用しています。

Googleの検索によると、sudoを使用してコマンドを実行すると、sudoは特定の環境変数を削除することがわかりました。だから私はそうでしたsudo -E ./start.sh。 JDK 7を再利用します。

start.shを開き、echo $JAVA_HOME変数が正しく設定されていることを確認するために1行を追加しました。出力はecho空行です。

Defaults env_keep += "JAVA_HOME"今、start.shを実行すると、私のechoステートメントは空白行に戻ります。 ServiceMixはまだJDK 7を使用しています。

今すぐstart.shを実行しようとすると、/etc/profileechoステートメントは空白行に戻ります。同様に、ServiceMix は JDK 7 を使用します。

私はここで何を間違えましたか?

FWIW、私はMac OS X 10.8.2を使用しています。echo $SHELL私の端末の/bin/bashに戻ります。使用sudo suして実行すると、echo $SHELL/bin/sh が返されます。

答え1

次の手順を試してください。

  1. /etc/profile.dディレクトリ内にset_java_path.sh次の行を含むファイルという名前のファイルを作成します。

    export JAVA_HOME=<_complete_path_to_java6_directory_>

  2. bash上記の変更をロードするには、コマンドを一度実行してください。そしてstart.shスクリプトを実行してください。

編集する:

ディレクトリが存在しない場合は、同じ名前(権限:0755と所有者とグループのルート)でディレクトリを作成し、/etc/profile.dファイルに/etc/profile次のコードを追加します。

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

答え2

環境変数をsudoerに保つには、Defaults env_keep += PATHsudoerファイル(sudo visudo)に追加します。

関連情報