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


18

어떻게 그들이 사용하지 않고 GUI 애플리케이션에 사용할 수 있도록 맥 OS X에서 환경 변수까지 한 세트 않습니다 ~ / .MacOSX / environment.plist 또는 로그인 후크 (이 이후이되어 사용되지 않는 )?


@ ersin-er StackOverflow의 답변 "요세미티 및 엘 캐피 탄과 함께 작동하는 단일 소스의 명령 줄 및 GUI 응용 프로그램 솔루션" 은이 질문을 찾는 사람들에게 흥미로울 수 있습니다.
l --marc l

답변:


16

산 사자에 모든 /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과 함께 작동합니다 :-)

추신 : 물론 특정 경로 요구에 맞게 경로 항목을 조정해야합니다.


1
감사합니다! 이것은 나에게 완벽했다. 10.11 (El Capitan) 에서 변경 사항을 적용 하려면 Matthew제공 한 명령 도 실행해야했습니다 Info.plist.
dsedivec

8

솔루션은의 로그인 후크를 모방하기 위해 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명령은 자세한 내용은 해당 맨 페이지를 참조하십시오. texstudioTeXShop 과 같은 GUI 응용 프로그램 은 내 자신의 텍스 트리를 볼 수 있습니다 (나는 여전히 Snow Leopard 사람이라고 언급해야 함) . 개선 할 수있는 것 :

  1. 쉘 스크립트에 포함 #filename="$1"되어 있습니다. 파일 이름은 실행 에이전트가 인수로 스크립트에 피드해야하므로 우발적이지는 않지만 작동하지 않습니다.

  2. 여기에 언급 된 바와 같이 (독일어와 페이 월!) 스크립트를 런칭 에이전트 자체에 넣을 수 있습니다.

  3. 이 솔루션이 eval사용자 제공 문자열과 함께 사용 되므로이 솔루션의 보안이 확실하지 않습니다 .

  4. 이 방법을 사용하는 MANPATH의 정의가 제대로 작동하지 않았지만 확실하지 않습니다.

애플은 ~ / launchd.conf 에 물건을 넣음으로써 다소 비슷한 접근 방식을 의도 했지만 현재이 날짜와 OS에 대해서는 지원되지 않습니다 (맨 페이지 참조 launchd.conf). 글 로빙 (globbing)과 같은 것은이 제안에서와 같이 작동하지 않을 것이라고 생각합니다. 물론 / Library / LaunchAgents / 또는 ~ / Library / LaunchAgents /에 상주해야하는 시작 에이전트를 제외하고 이러한 파일을 다른 곳에 배치 할 수 있습니다 .

마지막으로, Launch Agents에 대한 정보로 사용한 소스를 언급해야합니다 ( 1 , 2 , 3 , 4) .

업데이트 : 현재 버전 10.8에서는 작동하지 않습니다. 응용 프로그램 별 해결 방법은 여기여기에 설명 되어 있습니다 .


그건 그렇고, 터미널 환경에서 PATH 변수를 정의 하고이 시작 에이전트를 사용하려면 export PATH=.:"$(launchctl getenv PATH)"~ / .bash_profile (다른 쉘과 유사하게) 을 작성하는 것이 좋습니다 . path_helper쉘 스크립트에서 호출되었으므로 가능합니다 . OS X의 PATH 변수에 대한 자세한 내용은 이 답변을 확인 하십시오 .
Percival Ulysses

3

plist 파일을 변경 한 후 터미널에서 다음 명령을 실행하면 @flori가 제공 한 답변은 Maverick에서 나를 위해 작동합니다.

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user 

killall Finder

나는 El Capitan과 같은 행동을했으며 @flori의 답변에 귀하의 요점을 추가했습니다.
Seki

2

편집 : @ 퍼시벌 - 율리시즈가 제공하는 대답은 다음과 같은 작은 변화와 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를 제어 합니다.


0

다른 옵션은을 사용하는 것 /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 export및 로 표시됩니다 launchctl export.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.