หลังจากการทดลองมากมายที่มีตัวเลือกต่างกันฉันก็สรุปว่า:
มีวิธีรวมการตั้งค่าPATH
สำหรับแอปพลิเคชันที่เปิดตัวด้วยวิธีการที่แตกต่างกัน (เช่น shell script, Finder และ Spotlight)? ก็ใช่และไม่ใช่:
- ไม่ : การตั้งค่า
PATH
สคริปต์เริ่มต้นของเชลล์ (เช่น.bashrc
) ใช้งานได้กับแอปที่เปิดตัวโดยเชลล์เท่านั้น
- ไม่ : การตั้งค่า
PATH
สำหรับlaunchd
กระบวนการปัจจุบันผ่านlaunchctl setenv PATH <...>
ไม่ได้สำหรับฉันเลย
- ใช่ : การตั้งค่า
PATH
ใน/etc/launchd.conf
(และการรีสตาร์ทระบบ) จะทำให้PATH
มองเห็นได้อย่างเหมาะสมในแอปพลิเคชั่นที่เปิดตัวโดย Spotlight, Dock และ Finder และเชลล์ (local) ในภายหลัง
- ไม่ : เชลล์ที่เรียกใช้จากระยะไกลไม่ได้สืบทอดสภาพแวดล้อม (ดู ... ทำไมเชลล์ระยะไกลผ่าน ssh ไม่สืบทอดสภาพแวดล้อม .. )
หมายเหตุสำหรับการตั้งค่าของเปลือกหอย:
สำหรับการทำงานที่ถูกต้องในเชลล์ท้องถิ่นเป็นสิ่งสำคัญที่จะต้องปิดการใช้งาน/usr/libexec/path_helper
เพราะเส้นทางเริ่มต้นใน/etc/paths
อาจเปลี่ยนลำดับของเส้นทางPATH
มา **
เพื่อรองรับเชลล์ระยะไกลคุณจำเป็นต้องนำเข้าlaunchd
สภาพแวดล้อมเข้าสู่เชลล์อีกครั้ง ใช้สิ่งนี้ในของคุณ.bashrc
:
# the vexatious path stuff
eval $(launchctl export)
ผลที่ตามมาของโชคร้ายคือ:
- ไม่มีวิธีที่จะมีการตั้งค่าแบบรวมเหล่านี้ในแต่ละผู้ใช้ (
~/.launchd.conf
ใช้งานไม่ได้)
- ไม่มีวิธีง่ายๆในการสร้าง PATH จากแหล่งข้อมูลต่าง ๆ โดยใช้เทคนิคเช่นการขยายโฮมไดเร็กตอรี่และอื่น ๆ
/etc/launch.conf
ไม่ได้ทำงานให้กับเปลือกหอยเข้าสู่ระบบจากระยะไกลผ่าน SSH (ผมถือว่าเพราะsshd
ไม่ผ่านสภาพแวดล้อมของมันสืบทอดมาจากแม่ของมันlaunchd
ไปยังเปลือกเด็ก.) - ฉันจะแก้ไขคำตอบตามนั้น