어떻게 그들이 사용하지 않고 GUI 애플리케이션에 사용할 수 있도록 맥 OS X에서 환경 변수까지 한 세트 않습니다 ~ / .MacOSX / environment.plist 또는 로그인 후크 (이 이후이되어 사용되지 않는 )?
어떻게 그들이 사용하지 않고 GUI 애플리케이션에 사용할 수 있도록 맥 OS X에서 환경 변수까지 한 세트 않습니다 ~ / .MacOSX / environment.plist 또는 로그인 후크 (이 이후이되어 사용되지 않는 )?
답변:
산 사자에 모든 /etc/paths
및 /etc/launchd.conf
편집은 적용되지 않습니다!
애플 개발자 포럼의 말 :
".app 자체의 Info.plist를 변경하여 원하는 환경 변수가 포함 된"LSEnvironment "사전을 포함하십시오.
~ / .MacOSX / environment.plist는 더 이상 지원되지 않습니다. "
그래서 앱을 직접 편집 Info.plist
했습니다 ( "AppName.app"(이 경우 SourceTree)를 마우스 오른쪽 버튼으로 클릭 한 다음 " Show package contents
")
새로운 키 / dict 쌍을 추가했습니다 :
<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과 함께 작동합니다 :-)
추신 : 물론 특정 경로 요구에 맞게 경로 항목을 조정해야합니다.
솔루션은의 로그인 후크를 모방하기 위해 Launch Agentlaunchctl
와 결합 된 의 기능을 사용합니다 . 의 저장소를 사용하는 다른 솔루션 에 대해서는 이 비교를 참조하십시오 . 여기에 사용 된 시작 에이전트는 / Library / LaunchAgents /에 있습니다 .launchd
<?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 키입니다. 실제 작업은 쉘 스크립트 /Users/Shared/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
하려면 PATH가 바로 설정합니다. 마지막으로 ~ / .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
명령은 자세한 내용은 해당 맨 페이지를 참조하십시오. texstudio 및 TeXShop 과 같은 GUI 응용 프로그램 은 내 자신의 텍스 트리를 볼 수 있습니다 (나는 여전히 Snow Leopard 사람이라고 언급해야 함) . 개선 할 수있는 것 :
쉘 스크립트에 포함 #filename="$1"
되어 있습니다. 파일 이름은 실행 에이전트가 인수로 스크립트에 피드해야하므로 우발적이지는 않지만 작동하지 않습니다.
여기에 언급 된 바와 같이 (독일어와 페이 월!) 스크립트를 런칭 에이전트 자체에 넣을 수 있습니다.
이 솔루션이 eval
사용자 제공 문자열과 함께 사용 되므로이 솔루션의 보안이 확실하지 않습니다 .
이 방법을 사용하는 MANPATH의 정의가 제대로 작동하지 않았지만 확실하지 않습니다.
애플은 ~ / launchd.conf 에 물건을 넣음으로써 다소 비슷한 접근 방식을 의도 했지만 현재이 날짜와 OS에 대해서는 지원되지 않습니다 (맨 페이지 참조 launchd.conf
). 글 로빙 (globbing)과 같은 것은이 제안에서와 같이 작동하지 않을 것이라고 생각합니다. 물론 / Library / LaunchAgents / 또는 ~ / Library / LaunchAgents /에 상주해야하는 시작 에이전트를 제외하고 이러한 파일을 다른 곳에 배치 할 수 있습니다 .
마지막으로, Launch Agents에 대한 정보로 사용한 소스를 언급해야합니다 ( 1 , 2 , 3 , 4) .
업데이트 : 현재 버전 10.8에서는 작동하지 않습니다. 응용 프로그램 별 해결 방법은 여기 와 여기에 설명 되어 있습니다 .
export PATH=.:"$(launchctl getenv PATH)"
~ / .bash_profile (다른 쉘과 유사하게) 을 작성하는 것이 좋습니다 . path_helper
쉘 스크립트에서 호출되었으므로 가능합니다 . OS X의 PATH 변수에 대한 자세한 내용은 이 답변을 확인 하십시오 .
plist 파일을 변경 한 후 터미널에서 다음 명령을 실행하면 @flori가 제공 한 답변은 Maverick에서 나를 위해 작동합니다.
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder
편집 : @ 퍼시벌 - 율리시즈가 제공하는 대답은 다음과 같은 작은 변화와 10.9 매버릭스에 나를 위해 작동 /Users/Shared/conflaunchd.sh의 전에 스크립트 권리를 exit 0
하고 줄을 추가
killall Dock
killall SystemUIServer
Dock과 메뉴 막대를 다시 시작하십시오. 이 후 Dock 또는 Spotlight에서 시작된 응용 프로그램은 올바른 PATH를 상속합니다. Finder를 사용하여 PATH 핵심 응용 프로그램을 시작하면 killall Finder
추가 될 수도 있습니다.
에서 .bash_profile
나는 줄을 사용
export PATH=`launchctl getenv PATH`
터미널의 PATH를 설정하려면 ~ / .conf.launchd 파일 과 같은 위치에서 PATH를 제어 합니다.
다른 옵션은을 사용하는 것 /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
.