문제
업데이트 : 아래 링크 완전한 대답이 없습니다. 두 곳에서 경로 나 가변을 설정 해야하는 것은 (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 < ~/.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 전에 실행될 수 있으므로 설정 한 환경 변수를 볼 수 없습니다.
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 쓰기 권한의 경우.