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변수가 올바르게 설정되었는지 확인하기 위해 한 줄을 추가했습니다. 출력은 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다음 줄을 포함하는 file이라는 파일을 만듭니다.

    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)에 추가하세요.

관련 정보