มีหลายที่ที่คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมได้
~/.profile
: ใช้สิ่งนี้สำหรับตัวแปรที่คุณต้องการตั้งค่าในทุกโปรแกรมที่เรียกใช้จากเทอร์มินัล (โปรดทราบว่าเชลล์ทั้งหมดที่เปิดใน Terminal.app ต่างจากเชลล์ในลีนุกซ์ซึ่งแตกต่างจากบน Linux)
~/.bashrc
: สิ่งนี้ถูกเรียกใช้สำหรับเชลล์ที่ไม่ใช่ล็อกอินเชลล์ ใช้สิ่งนี้สำหรับนามแฝงและสิ่งอื่น ๆ ที่จำเป็นต้องกำหนดใหม่ใน subshells ไม่ใช่สำหรับตัวแปรสภาพแวดล้อมที่สืบทอด
/etc/profile
: จะโหลดก่อน ~ / .profile แต่จะเทียบเท่ากัน ใช้มันเมื่อคุณต้องการให้ตัวแปรนำไปใช้กับโปรแกรมเทอร์มินัลที่เปิดตัวโดยผู้ใช้ทั้งหมดในเครื่อง (สมมติว่าพวกเขาใช้ bash)
~/.MacOSX/environment.plist
: นี่คืออ่านโดย loginwindow เมื่อเข้าสู่ระบบ มันใช้กับแอปพลิเคชันทั้งหมดรวมถึง GUI ยกเว้นว่าเปิดใช้โดย Spotlight ใน 10.5 (ไม่ใช่ 10.6) คุณต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งเพื่อให้การเปลี่ยนแปลงมีผล ไฟล์นี้ไม่รองรับอีกต่อไปตั้งแต่ OS X 10.8
launchd
อินสแตนซ์ของผู้ใช้ของคุณ: สิ่งนี้ใช้กับโปรแกรมทั้งหมดที่เปิดตัวโดยผู้ใช้ GUI และ CLI คุณสามารถใช้การเปลี่ยนแปลงได้ตลอดเวลาโดยใช้คำสั่งในsetenv
ในทางทฤษฎีคุณควรจะสามารถใส่คำสั่งและจะอ่านโดยอัตโนมัติเมื่อผู้ใช้เข้าสู่ระบบ แต่ในทางปฏิบัติสนับสนุนไฟล์นี้ไม่เคยดำเนินการ แต่คุณสามารถใช้กลไกอื่นเพื่อรันสคริปต์เมื่อเข้าสู่ระบบและให้เรียกใช้สคริปต์เพื่อตั้งค่าสภาพแวดล้อมlaunchctl
setenv
~/.launchd.conf
launchd
launchctl
launchd
/etc/launchd.conf
: นี่ถูกอ่านโดย launchd เมื่อระบบเริ่มทำงานและเมื่อผู้ใช้ล็อกอินซึ่งจะมีผลกับทุกกระบวนการในระบบเพราะ launchd เป็นกระบวนการรูท เพื่อใช้การเปลี่ยนแปลงไปยังรากทำงาน launchd sudo launchctl
คุณสามารถท่อคำสั่งลง
สิ่งพื้นฐานที่ต้องเข้าใจคือ:
- ตัวแปรสภาพแวดล้อมได้รับการถ่ายทอดโดยเด็ก ๆ ของกระบวนการในเวลาที่พวกเขาแยกกัน
- กระบวนการรูทเป็นอินสแตนซ์ launchd และยังมีอินสแตนซ์ launchd แยกต่างหากต่อเซสชันผู้ใช้
- launchd ช่วยให้คุณสามารถเปลี่ยนตัวแปรสภาพแวดล้อมในปัจจุบันใช้
launchctl
; จากนั้นตัวแปรที่ได้รับการปรับปรุงจะถูกสืบทอดโดยกระบวนการใหม่ทั้งหมดที่จะดำเนินการจากนั้นเป็นต้นไป
ตัวอย่างการตั้งค่าตัวแปรสภาพแวดล้อมด้วย launchd:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
ตอนนี้เปิดแอพ GUI ของคุณที่ใช้ตัวแปรและ voila!
เพื่อหลีกเลี่ยงความจริงที่~/.launchd.conf
ไม่ได้ผลคุณสามารถใส่สคริปต์ต่อไปนี้ใน~/Library/LaunchAgents/local.launchd.conf.plist
:
<?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>local.launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
จากนั้นคุณสามารถใส่setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
ข้างใน~/.launchd.conf
และมันจะถูกดำเนินการในแต่ละการเข้าสู่ระบบ
โปรดทราบว่าเมื่อไพพ์รายการคำสั่งลงใน launchctl ในรูปแบบนี้คุณจะไม่สามารถตั้งค่าตัวแปรสภาพแวดล้อมด้วยค่าที่มีช่องว่าง หากคุณจำเป็นต้องทำเช่นนั้นคุณสามารถเรียก launchctl launchctl setenv MYVARIABLE "QUOTE THE STRING"
ดังนี้
นอกจากนี้โปรดทราบว่าโปรแกรมอื่น ๆ ที่ทำงานที่การเข้าสู่ระบบอาจดำเนินการก่อนที่จะเปิดตัวและอาจไม่เห็นตัวแปรสภาพแวดล้อมที่ตั้งไว้