หลังจากที่ฉันแยกแยะปัญหา PATH ของ OSXจนถึงรุ่น Mavericks ปัญหากลับมาที่ Yosemite !!!
ดังนั้นผมจึงต้องการที่จะเลียนแบบเก่าlaunch.conf
คุณลักษณะใหม่ใน Mac OSX 10.10 Yosemite ปล่อยเพื่อให้มีตัวแปรสภาพแวดล้อมของเส้นทางใน GUI ปพลิเคชันเช่นคาร์บอน EmacsหรือRStudioใช้ได้ ผมใช้ความคิดที่ดีของผู้ใช้ StackOverflow Ursalaunchctl
การตั้งค่าเชลล์สคริปต์ซึ่งกำหนดค่าตัวแปรสภาพแวดล้อมผ่าน (โปรดดูคำตอบ StackOverflow ของเขาที่นี่ .) งานนี้สำหรับตัวแปรสภาพแวดล้อมมากที่สุดแต่ไม่ได้สำหรับตัวแปรเส้นทาง
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"
จากนั้นฉันสร้าง Plists สำหรับlaunchd
(รายการเหล่านี้และสคริปต์อื่น ๆ ที่กล่าวถึงในภาคผนวกด้านล่าง) จากนั้นฉันก็เปิดใช้งานพวกเขาด้วย
$ sudo launchctrl load ...
จากนั้นฉันปิดการใช้งานpath_helper
ยูทิลิตี้ใน/etc/
โปรไฟล์ไฟล์เชลล์ init เพื่อที่จะไม่เขียนทับการenvironment.rc
ตั้งค่า และในที่สุดฉันก็รีสตาร์ทเครื่อง
2. ผลกระทบคืออะไร
เมื่อฉันเริ่มต้น Terminal ตัวแปรสภาพแวดล้อมใหม่JAVA_HOME
และได้ENVIRONMENT_RC
รับการตั้งค่าตามenvironment.rc
แต่เส้นทางถูกตั้งค่าเป็น
/ usr / bin: / bin
ในการสั่งซื้อเพื่อให้แน่ใจว่าไม่มีbash
ไฟล์ init ได้ในทางที่ผมเขียนสคริปต์หลามน้อยแทน (ในภาคผนวกเช่นกัน) จะแสดงตัวแปรในสภาพแวดล้อมปัจจุบันและฉันดำเนินการนี้โดยตรงโดยคลิกคู่Platypusเสื้อคลุม ตัวแปรใหม่ถูกตั้งค่าอีกครั้งในขณะที่ PATH มีค่าเริ่มต้นของระบบ
เหตุใดฉันจึงตั้งค่าตัวแปรอื่น แต่ไม่ใช่ตัวแปร PATH และฉันจะแก้ปัญหานี้ด้วยวิธีรวมเป็นหนึ่งได้อย่างไร
ปรับปรุง:
สถานการณ์น่างงมาก: เชลล์ ( bash
อย่างน้อยที่สุด) ใน Terminal หรือ Emacs จะเลือก PATH ที่คุณตั้งค่าผ่านทางlaunchctl
แต่แอพ GUI อื่น ๆ จะไม่ทำเช่นสคริปต์ python ขนาดเล็กที่กล่าวถึงตรงที่เรียกผ่าน Platypus จะไม่แสดงที่กำหนดเองของคุณ เส้นทาง. และแม้แต่ Emac เองเองก็ไม่ทราบเส้นทางที่ถูกต้อง: คุณสังเกตเห็นสิ่งนี้เช่นเมื่อคุณออกคำสั่ง Emacs M-x ispell-buffer
; เครื่องมือ unix ispell
ที่ emacs พยายามโทรหาจะไม่พบถ้ามันอยู่บนเส้นทางที่คุณกำหนดเอง
ภาคผนวก
net.halloleo.environment.plist
ไฟล์เรียกทำงาน config ใน/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
ไฟล์เรียกทำงาน config ใน/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 start-up ที่แก้ไขแล้ว:
# 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
ในระหว่างกระบวนการ initialisation ของพวกเขา แอพ GUI ไม่ได้รับเส้นทางตาม/etc/paths
- และฉันถามเฉพาะเกี่ยวกับแอพ GUI