문제

업데이트 : 아래 링크 완전한 대답이 없습니다. 두 곳에서 경로 나 가변을 설정 해야하는 것은 (GUI의 경우 1 개, 쉘 용)는 절름발이입니다.

복제가 아닙니다: OS X의 환경 변수 설정?


환경 변수를 설정하고 수정하기가 매우 쉬운 Windows 배경에서 나오면 (시스템 속성> 고급> 환경 변수로 이동) Mac OS 10.5에서는 간단하지 않은 것 같습니다. 대부분의 참조에 따르면/etc/profile 또는 ~/.profile을 업데이트해야합니다. 그것들은 시스템 변수와 사용자 변수와 동일합니까? 예를 들어, 어디에서 설정해야합니다 JAVA_HOME 변하기 쉬운?


편집하다:

Eclipse와 같은 앱뿐만 아니라 터미널에서 변수에 액세스 할 수 있기를 원합니다. 또한이 발효를 위해 다시 시작/로그 아웃 할 필요가 없기를 바랍니다.

도움이 되었습니까?

해결책

복제가 필요하지 않습니다. 사용하는 환경 변수 (및 아동 프로세스, 즉 스포트라이트에서 시작하는 모든 것)를 사용하여 사용합니다. launchctl setenv.

예를 들어, 현재 경로를 설정 한 후 현재 경로를 미러링하려면 .bashrc 또는 어디에서나 :

PATH=whatever:you:want
launchctl setenv PATH $PATH

실행중인 응용 프로그램에서 환경 변수는 자동으로 업데이트되지 않습니다. 업데이트 된 환경 변수를 얻으려면 응용 프로그램을 다시 시작해야합니다 (예 : 쉘에서 변수를 설정할 수는 있지만 PATH=whatever:you:want; 터미널을 다시 시작할 필요가 없습니다).

다른 팁

환경 변수를 설정할 수있는 여러 곳이 있습니다.

  • ~/.profile: 터미널에서 시작한 모든 프로그램에서 설정하려는 변수에 이것을 사용하십시오 (Linux와 달리 Terminal.app에 열린 모든 쉘은 로그인 쉘입니다).
  • ~/.bashrc: 이것은 로그인 쉘이 아닌 쉘에 대해 호출됩니다. 상속 된 환경 변수가 아니라 서브 쉘로 재정의 해야하는 별칭 및 기타 사항에는이를 사용하십시오.
  • /etc/profile: 이것은 ~/.profile 이전에로드되지만 그렇지 않으면 동일합니다. 변수가 컴퓨터의 모든 사용자가 시작한 터미널 프로그램에 적용하려면 (BASH를 사용한다고 가정)를 사용하십시오.
  • ~/.MacOSX/environment.plist: 로그인시 LoginWindow가 읽습니다. 10.6이 아닌 스포트라이트로 시작된 GUI를 포함한 모든 응용 프로그램에 적용됩니다 (10.6이 아님). 변경 사항이 적용되도록 로그 아웃하고 로그인해야합니다. 이 파일은 OS X 10.8에 따라 더 이상 지원되지 않습니다.
  • 사용자의 launchd 인스턴스 : 이는 사용자, GUI 및 CLI가 시작한 모든 프로그램에 적용됩니다. 사용하여 언제든지 변경 사항을 적용 할 수 있습니다. setenv 명령을 내립니다 launchctl. 이론에 의하면, 당신은 넣을 수 있어야합니다 setenv 명령 ~/.launchd.conf, 그리고 launchd 사용자가 로그인하면 자동으로 읽지 만 실제로이 파일에 대한 지원은 구현되지 않았습니다. 대신 다른 메커니즘을 사용하여 로그인시 스크립트를 실행하고 해당 스크립트 호출을 할 수 있습니다. launchctl 설정합니다 launchd 환경.
  • /etc/launchd.conf: 이것은 시스템이 시작될 때와 사용자가 로그인 할 때 시작됩니다. LANCHD가 루트 프로세스이기 때문에 시스템의 모든 단일 프로세스에 영향을 미칩니다. 실행중인 루트 발사에 변경 사항을 적용하려면 명령을 sudo launchctl.

이해해야 할 근본적인 것들은 다음과 같습니다.

  • 환경 변수는 갈등 당시 프로세스의 어린이에 의해 상속됩니다.
  • 루트 프로세스는 시작 인스턴스이며 사용자 세션 당 별도의 시작 인스턴스도 있습니다.
  • LANKED를 사용하여 현재 환경 변수를 변경할 수 있습니다. launchctl; 그런 다음 업데이트 된 변수는 그 이후로 포크로 된 모든 새로운 프로세스에 의해 상속됩니다.

실행으로 환경 변수 설정의 예 :

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

이제 변수를 사용하는 GUI 앱과 Voila를 시작하십시오!

사실을 해결하기 위해 ~/.launchd.conf 작동하지 않으면 다음 스크립트를 넣을 수 있습니다. ~/Library/LaunchAgents/local.launchd.conf.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

그러면 당신은 넣을 수 있습니다 setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE 내부에 ~/.launchd.conf, 그리고 각 로그인시 실행됩니다.

이 방식으로 명령 목록을 LaunchCTL로 배관 할 때는 공간이 포함 된 값으로 환경 변수를 설정할 수 없습니다. 그렇게 해야하는 경우 다음과 같이 LaunchCTL에 전화 할 수 있습니다. launchctl setenv MYVARIABLE "QUOTE THE STRING".

또한 로그인시 실행되는 다른 프로그램은 LaunchAgent 전에 실행될 수 있으므로 설정 한 환경 변수를 볼 수 없습니다.

OP가 찾고있는 것은 단순하고 창과 같은 솔루션이라고 생각합니다.

여기 go :

https://www.macupdate.com/app/mac/14617/rcenvironment

Mac OS X의 것과 매우 가까운 Linux에서 읽을 수 있습니다. 또는 BSD UNIX에서 읽을 수 있습니다. 대부분의 경우 Linux와 BSD의 차이점은 그다지 많지 않습니다.

/etc/profile 시스템 환경 변수입니다.

~/.profile 사용자 별 환경 변수입니다.

"Java_home 변수를 어디에서 설정해야합니까?"

  • 여러 사용자가 있습니까? 그들은 신경 쓰나요? 다른 사용자를 변경하여 다른 사용자를 혼란스럽게 하시겠습니까? /etc/profile?

일반적으로 저는 유일한 사용자이지만 시스템 전체 설정을 엉망으로 만드는 것을 선호합니다. 로컬 설정을 편집하는 것을 선호합니다.

GUI 앱의 경우 생성 및 편집해야합니다. ~/.MacOSX/environment.plist. 자세한 내용은 여기. 적용하려면 로그 아웃해야합니다. 그들이 터미널에서 시작된 응용 프로그램에도 영향을 미치는지 확실하지 않지만 그럴 것이라고 생각합니다.

터미널에서 시작된 앱의 경우 ~/.profile 파일을 편집 할 수도 있습니다.

그냥 열어 ~/.profile 파일을 통해 nano 터미널에서 유형 :

export PATH=whatever/you/want:$PATH

이 파일 (CMD+X 및 Y)을 저장하십시오. 그런 다음 로그 아웃/로그인하거나 터미널에서 새 탭을 열고 새 변수를 사용해보십시오.

": $ path"를 추가하는 것을 잊지 마십시오.

단일 소스에서 명령 줄 및 GUI 애플리케이션의 OS X 환경 변수 동기화 OSX-ENV-SYNC.

또한 관련 질문에 대한 답변을 게시했습니다 여기.

MACOS에서 환경 변수를 영구적으로 변경하려면 /etc/paths. 메모,이 파일은 기본적으로 읽기 전용이므로 CHMOD 쓰기 권한의 경우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top