환경 변수를 설정할 수있는 곳이 몇 군데 있습니다.
~/.profile
: 터미널에서 시작된 모든 프로그램에서 설정하려는 변수에이 값을 사용하십시오 (Linux와 달리 Terminal.app에서 열린 모든 쉘은 로그인 쉘임).
~/.bashrc
: 로그인 쉘이 아닌 쉘에 대해 호출됩니다. 상속 된 환경 변수가 아닌 서브 쉘에서 재정의해야하는 별명 및 기타 항목에이를 사용하십시오.
/etc/profile
: ~ / .profile 전에로드되지만 그렇지 않은 경우에는 동일합니다. 변수를 시스템의 모든 사용자가 시작한 터미널 프로그램 (bash를 사용한다고 가정)에 적용하려는 경우이 변수를 사용하십시오.
~/.MacOSX/environment.plist
: 로그인시 loginwindow로 읽습니다. 10.5 (10.6 아님)에서 Spotlight가 시작한 응용 프로그램을 제외하고 GUI 응용 프로그램을 포함한 모든 응용 프로그램에 적용됩니다. 변경 사항을 적용하려면 로그 아웃했다가 다시 로그인해야합니다. 이 파일은 OS X 10.8부터 더 이상 지원되지 않습니다.
- 사용자
launchd
인스턴스 : 이는 사용자, GUI 및 CLI가 시작한 모든 프로그램에 적용됩니다. 의 setenv
명령을 사용하여 언제든지 변경 사항을 적용 할 수 있습니다 launchctl
. 이론적으로 , 당신은 넣을 수 있어야 setenv
에서 명령을 ~/.launchd.conf
하고, launchd
사용자가 로그인 할 때 자동으로 읽어 것이지만,이 파일에 대한 연습 지원에 구현되지 않았습니다. 대신 다른 메커니즘을 사용하여 로그인시 스크립트를 실행하고 해당 스크립트를 호출 launchctl
하여 launchd
환경 을 설정할 수 있습니다.
/etc/launchd.conf
: 이것은 시스템을 시작할 때와 사용자가 로그인 할 때 시작하여 읽습니다. 시작된 프로세스는 루트 프로세스이므로 시스템의 모든 단일 프로세스에 영향을줍니다. 실행중인 루트 시작에 변경 사항을 적용하기 위해 명령을에 파이프 할 수 있습니다 sudo launchctl
.
이해해야 할 기본 사항은 다음과 같습니다.
- 환경 변수는 분기 시점에 프로세스의 자식에 의해 상속됩니다.
- 루트 프로세스는 시작된 인스턴스이며 사용자 세션마다 별도의 시작된 인스턴스가 있습니다.
- launchd를 사용하면
launchctl
;를 사용하여 현재 환경 변수를 변경할 수 있습니다 . 업데이트 된 변수는 그때부터 분기되는 모든 새로운 프로세스에 의해 상속됩니다.
시작된 환경 변수 설정의 예 :
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
이제 변수를 사용하는 GUI 앱을 시작하십시오.
작동 ~/.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"
..
또한 로그인시 실행되는 다른 프로그램은 런치 에이전트 이전에 실행될 수 있으므로 설정 한 환경 변수가 표시되지 않을 수 있습니다.