GUI 애플리케이션용 OS X에서 환경 변수 설정

GUI 애플리케이션용 OS X에서 환경 변수 설정

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_helperget 의 호출에 주목하세요.바로 설정하세요. 마지막으로,~/.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내 자신의 텍스 트리를 볼 수 있습니다. 개선할 수 있는 사항:

  1. 쉘 스크립트에는 #filename="$1"이 포함되어 있습니다. 파일 이름은 실행 에이전트에 의해 스크립트에 인수로 제공되어야 하지만 작동하지 않기 때문에 이것은 우연이 아닙니다.

  2. 말한 바와 같이여기(독일어로 페이월 뒤에 있습니다!) 실행 에이전트 자체에 스크립트를 넣는 것이 가능합니다.

  3. eval이 솔루션은 사용자가 제공한 문자열과 함께 사용되므로 얼마나 안전한지 잘 모르겠습니다 .

  4. 이 방법을 사용한 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루트 실행 프로세스와 사용자별 실행 프로세스 모두에 적용됩니다. setenvin 으로 설정된 환경 변수 는 및 /etc/launchd.conf모두로 표시됩니다 .sudo launchctl exportlaunchctl export

관련 정보