
Mac OS X에서 환경 변수를 사용하지 않고 GUI 응용 프로그램에서 사용할 수 있도록 설정하는 방법은 무엇입니까?~/.MacOSX/environment.plist또는로그인 후크(이것들은더 이상 사용되지 않음)?
답변1
Mountain Lion에서는 모든 /etc/paths
편집 /etc/launchd.conf
이 아무런 영향을 미치지 않습니다!
Apple의 개발자 포럼에서는 다음과 같이 말합니다.
"원하는 환경 변수가 포함된 "LSEnvironment" 사전을 포함하도록 .app 자체의 Info.plist를 변경하세요.
~/.MacOSX/environment.plist는 더 이상 지원되지 않습니다."
그래서 앱을 직접 편집했습니다 Info.plist
("AppName.app"(이 경우 SourceTree)를 마우스 오른쪽 버튼으로 클릭한 다음 " Show package contents
").
다음과 같은 새로운 키/딕셔너리 쌍을 추가했습니다.
<key>LSEnvironment</key>
<dict>
<key>PATH</key>
<string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>
(보다:Apple의 LaunchServicesKeys 문서)
이제 앱(제 경우에는 SourceTree)이 지정된 경로를 사용하고 git 1.9.3에서 작동합니다 :-)
추신: 물론 특정 경로 요구 사항에 맞게 경로 항목을 조정해야 합니다.
답변2
이 솔루션은 의 기능을 launchctl
다음과 결합하여 사용합니다.에이전트 실행예전의 로그인 후크를 모방합니다. 의 저장소를 사용하는 다른 솔루션은 launchd
다음을 참조하세요.이 비교. 여기에 사용된 발사 에이전트는 다음 위치에 있습니다./라이브러리/LaunchAgents/:
<?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>user.conf.launchd</string>
<key>Program</key>
<string>/Users/Shared/conflaunchd.sh</string>
<key>ProgramArguments</key>
<array>
<string>~/.conf.launchd</string>
</array>
<key>EnableGlobbing</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>StandardIO</string>
</array>
</dict>
</plist>
한 가지 중요한 점은RunAtLoad발사 에이전트가 가능한 한 가장 빠른 시간에 실행되도록 키를 지정합니다. 실제 작업은 쉘 스크립트에서 수행됩니다./사용자/공유/conflaunchd.sh, 이는 다음과 같습니다.~/.conf.launchd그리고 그것을 다음에 공급합니다 launchctl
:
#! /bin/bash
#filename="$1"
filename="$HOME/.conf.launchd"
if [ ! -r "$filename" ]; then
exit
fi
eval $(/usr/libexec/path_helper -s)
while read line; do
# skip lines that only contain whitespace or a comment
if [ ! -n "$line" -o `expr "$line" : '#'` -gt 0 ]; then continue; fi
eval launchctl $line
done <"$filename"
exit 0
path_helper
get 의 호출에 주목하세요.길바로 설정하세요. 마지막으로,~/.conf.launchd그렇게 보인다
setenv PATH ~/Applications:"${PATH}"
setenv TEXINPUTS .:~/Documents/texmf//:
setenv BIBINPUTS .:~/Documents/texmf/bibtex//:
setenv BSTINPUTS .:~/Documents/texmf/bibtex//:
# Locale
setenv LANG en_US.UTF-8
이는 launchctl
명령입니다. 자세한 내용은 해당 맨페이지를 참조하세요. 나에게는 잘 작동한다(나는 아직도 Snow Leopard를 좋아한다). GUI 애플리케이션은 다음과 같다.텍스스튜디오그리고TeXShop내 자신의 텍스 트리를 볼 수 있습니다. 개선할 수 있는 사항:
쉘 스크립트에는
#filename="$1"
이 포함되어 있습니다. 파일 이름은 실행 에이전트에 의해 스크립트에 인수로 제공되어야 하지만 작동하지 않기 때문에 이것은 우연이 아닙니다.말한 바와 같이여기(독일어로 페이월 뒤에 있습니다!) 실행 에이전트 자체에 스크립트를 넣는 것이 가능합니다.
eval
이 솔루션은 사용자가 제공한 문자열과 함께 사용되므로 얼마나 안전한지 잘 모르겠습니다 .이 방법을 사용한 MANPATH 정의가 제대로 작동하지 않았던 것으로 기억하는데 잘 모르겠습니다.
Apple이 무언가를 넣어서 다소 유사한 접근 방식을 의도했다는 점을 언급해야 합니다.∼/launchd.conf이지만 현재 이 날짜와 OS에 대해서는 지원되지 않습니다( 맨페이지 참조 launchd.conf
). 나는 globbing 같은 것이 이 제안에서 하는 것처럼 작동하지 않을 것이라고 생각합니다. 물론 다음 위치에 있어야 하는 실행 에이전트를 제외하고 이러한 파일을 다른 곳에 저장할 수 있습니다./라이브러리/LaunchAgents/또는~/라이브러리/LaunchAgents/.
마지막으로 Launch Agent에 대한 정보로 사용한 소스를 언급해야 합니다. 1,2,삼,4.
업데이트: 현재 버전 10.8에서는 작동하지 않습니다. 애플리케이션별로 해결 방법이 설명되어 있습니다.여기그리고여기.
답변3
plist 파일을 변경한 후 터미널에서 다음 명령을 실행하면 @flori가 제공한 답변이 Maverick에서 작동합니다.
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder
답변4
또 다른 옵션은 를 사용하는 것입니다 /etc/launchd.conf
. 예를 들어 PATH
다음 행을 추가하여 기본값을 변경했습니다 /etc/launchd.conf
.
setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
/etc/launchd.conf
다시 시작하거나 launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
프로세스를 실행 및 종료하고 다시 시작하여 변경 사항을 적용할 수 있습니다 .
설정은 /etc/launchd.conf
루트 실행 프로세스와 사용자별 실행 프로세스 모두에 적용됩니다. setenv
in 으로 설정된 환경 변수 는 및 /etc/launchd.conf
모두로 표시됩니다 .sudo launchctl export
launchctl export