Mavericks 릴리스까지 OSX의 PATH 문제를 정리 한 후 문제가 Yosemite로 돌아 왔습니다 !!!
따라서 Carbon Emacs 또는 RStudiolaunch.conf
와 같은 GUI 응용 프로그램에서 PATH 환경 변수를 사용할 수 있도록 새로운 Mac OSX 10.10 Yosemite 릴리스 의 이전 기능 을 모방하고 싶습니다 . 나는 stackoverflow 사용자 ursa 의 훌륭한 아이디어를 사용하여 환경 변수를 구성하는 쉘 스크립트를 설정했습니다 . (스택 오버플로 답변은 여기를 참조 하십시오 .) 이것은 대부분의 환경 변수에서는 작동 하지만 PATH 변수 에서는 작동 하지 않습니다 .launchctl
1. 내가 무엇을 했습니까?
먼저 다음 /etc/environment.rc
과 같이 스크립트를 작성했습니다 .
launchctl setenv PATH /Users/halloleo/bin:/usr/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv JAVA_HOME /usr/local/jdk1.7
launchctl setenv ENVIRONMENT_RC "yes"
그런 다음에 대한 plist를 launchd
작성 했습니다 (아래 부록에있는 이들 및 기타 언급 된 스크립트 목록). 그런 다음
$ sudo launchctrl load ...
그런 다음 path_helper
쉘 초기화 파일 /etc/
프로파일 에서 유틸리티를 비활성화 하여 environment.rc
설정을 덮어 쓰지 않습니다 . 그리고 마지막으로 기계를 다시 시작했습니다.
2. 효과는 무엇입니까?
나는 새로운 환경 변수 터미널을 시작할 때 JAVA_HOME
와 ENVIRONMENT_RC
에 따라 설정되어 environment.rc
있지만, PATH로 설정되어
/ usr / bin : / bin
확인하기 위해 bash
init 파일이 현재 환경의 변수를 표시하기 위해 대신 작은 파이썬 스크립트를 작성하는 방식을 얻지 못했고 Platypus 래퍼를 두 번 클릭하여 직접 실행했습니다 . 새로운 변수가 다시 설정되는 반면 PATH는 시스템 기본값을 갖습니다.
그렇다면 왜 PATH 변수가 아닌 다른 변수를 설정할 수 있습니까? 그리고 어떻게 이것을 통합 된 방식으로 해결할 수 있습니까?
최신 정보:
상황은 매우 수수께끼입니다. bash
최소한 터미널 또는 Emacs 의 셸 은을 통해 설정 한 PATH를 선택 launchctl
하지만 다른 GUI 응용 프로그램은 그렇지 않습니다. 예를 들어 Platypus를 통해 직접 언급 된 최소한의 Python 스크립트는 사용자 정의를 표시하지 않습니다 통로. 그리고 Emacs 자체조차도 올바른 경로를 알지 못합니다 M-x ispell-buffer
. ispell
emacs가 호출하려고 시도 하는 유닉스 도구 는 사용자 정의 경로에 있으면 찾을 수 없습니다.
부록
net.halloleo.environment.plist
, 시작된 구성 파일 /Library/LaunchDaemons/
:
<?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>KeepAlive</key>
<false/>
<key>Label</key>
<string>net.halloleo.environment</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/environment.rc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment.rc</string>
</array>
</dict>
</plist>
net.halloleo.environment-user.plist
, 시작된 구성 파일 /Library/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>KeepAlive</key>
<false/>
<key>Label</key>
<string>net.halloleo.environment-user</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/environment.rc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment.rc</string>
</array>
</dict>
</plist>
/etc/profile
수정 된 bash 시작 파일 :
# System-wide .profile for sh(1)
# if [ -x /usr/libexec/path_helper ]; then
# eval `/usr/libexec/path_helper -s`
# fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
show_environ.py
스크립트는 모든 환경 변수를 표시합니다.
import os
print (os.environ)
/usr/libexec/path_helper
합니다. GUI 응용 프로그램은 에 따라 PATH를 얻지 못하며/etc/paths
GUI 응용 프로그램에 대해 특별히 물었습니다.