Mac OS X ตั้งค่าของ $ PATH อย่างไร


12

ฉันมีความเข้าใจพื้นฐานเกี่ยวกับวิธีการตั้งค่า $ PATH แต่มีเอกสารที่อธิบายอย่างสมบูรณ์ว่า Mac OS จะรับเส้นทางทั้งหมดที่ผนวกเข้ากับ $ PATH ได้อย่างไร ฉันรู้สิ่งที่ชอบ/etc/profile, /etc/pathsและ/etc/profile.dแต่จะมีสคริปต์อื่น ๆ ที่ในที่สุดก็ส่งผลกระทบต่อค่าของ $ PATH หรือไม่ ฉันไม่คุ้นเคยกับระหว่างผู้ที่ไม่ได้ลงชื่อเข้าใช้และผู้ใช้งานเชลล์ ( .bashrc, .bash_profile) แต่ฉันรู้ถึงความแตกต่างพื้นฐาน

คำตอบ:


9

โดยปกติ PATH ของคุณจะถูกกำหนดโดยเชลล์ สำหรับทุบตีทุกอย่างที่อธิบายไว้ในคู่มือการใช้งาน คุณยังสามารถเปิดman bashและข้ามไปยังINVOCATIONส่วนนั้นได้

เรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบหรือด้วย --login

เมื่อ Bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบหรือเป็นเชลล์ที่ไม่มีการโต้ตอบกับตัวเลือก --login มันจะอ่านและเรียกใช้คำสั่งจากไฟล์ / etc / profile ก่อนหากไฟล์นั้นมีอยู่ หลังจากอ่านไฟล์นั้นจะค้นหา ~ / .bash_profile, ~ / .bash_login และ ~ / .profile ตามลำดับและอ่านและเรียกใช้คำสั่งจากไฟล์แรกที่มีอยู่และอ่านได้

เรียกใช้เป็นเชลล์ที่ไม่ใช่การล็อกอินแบบโต้ตอบ

เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน Bash จะอ่านและดำเนินการคำสั่งจาก ~ / .bashrc หากไฟล์นั้นมีอยู่ ใน OS X นอกจากนี้ยังมีpath_helperเนื้อหาที่อ่าน/etc/paths.dและต่อท้ายเส้นทางของคุณ

ที่สำคัญคือที่ OS X Terminal จะเปิดเชลล์การเข้าสู่ระบบตามค่าเริ่มต้นในขณะที่บน Linux เชลล์มักจะเริ่มต้นเป็นเชลล์ที่ไม่ใช่การเข้าสู่ระบบ จอช Staiger มีคำอธิบายที่ดีของการเข้าสู่ระบบเทียบกับเปลือกหอยที่ไม่ได้เข้าสู่ระบบ

ดังนั้นมีสองสามหลักเท่านั้นที่คุณสามารถตั้งค่าเส้นทางได้:

  • /etc/profile(สายไหนpath_helper)
  • /etc/pathsและ/etc/paths.d(เรียกจากpath_helper)
  • ไฟล์คอนฟิกูเรชันเชลล์ของคุณ ( .bash_profile)

ขอบคุณสำหรับคำตอบที่กระชับและให้ข้อมูล ดังนั้นฉันเดาว่าฉันเข้าใจชนิดไหนสคริปต์ / สิ่งประดิษฐ์มีอิทธิพลต่อ $ PATH ในตอนนั้น ดังนั้นสิ่งนี้หมายความว่า/etc/profileเป็นสคริปต์ที่ใช้เป็นหลักโดยทุบตี? ฉันไม่เคยมีประสบการณ์กับกระสุนอื่น ๆ แต่ฉันคิดว่าพวกมันทำตามโครงสร้างที่แตกต่างกันหรือไม่?
Psycho Punch

/etc/profileถูกนำมาใช้โดยส่วนใหญ่ (ทั้งหมดหรือไม่ไม่แน่ใจ 100%) เปลือกหอย นั่นเป็นเหตุผลว่าทำไมจึงเป็นทางเลือกที่ดีในการวางสิ่งที่คุณต้องการในทุกที่เช่น PATH Bash อ่าน.bash_ไฟล์ในขณะที่ Zsh ยกตัวอย่างเช่นอ่าน.zshrcนอกเหนือจากไฟล์อื่น ๆ มันขึ้นอยู่กับเปลือก
slhck

"ใน OS X นอกจากนี้ยังมี path_helper ซึ่งอ่านเนื้อหาของ /etc/paths.d และต่อท้ายไฟล์เหล่านั้นกับเส้นทางของคุณ" ไม่ไม่ได้path_helperถูกเรียกสำหรับเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบ (หรือเชลล์ที่ไม่ใช่แบบโต้ตอบ) มันถูกเรียกใช้สำหรับเชลล์ล็อกอินแบบโต้ตอบโดยแท้จริงแล้ว /etc/profile
Maggyero

8

เส้นทางใน/etc/pathsและ/etc/paths.d/*มักจะมีการเพิ่มการPATHโดยpath_helper path_helperถูกเรียกใช้จาก/etc/profileดังนั้นจะถูกเรียกใช้เมื่อ bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบ แต่จะไม่ทำงานเมื่อ bash ถูกเรียกใช้เป็นเชลล์ที่ไม่ใช่การล็อกอินหรือเชลล์ที่ไม่โต้ตอบ

/etc/pathsมี/usr/local/binที่ท้ายโดยค่าเริ่มต้นและ/etc/paths.d/ว่างเปล่าโดยค่าเริ่มต้น

Terminal และ iTerm 2 เปิดเชลล์ใหม่เป็นเชลล์ล็อกอินตามค่าเริ่มต้นและเชลล์ที่เปิดเมื่อคุณ ssh กับคอมพิวเตอร์ของคุณก็เป็นเชลล์ล็อกอินด้วย เทอร์มินัลอีมูเลเตอร์จำนวนมากบนแพลตฟอร์มอื่นtmuxและโหมดเชลล์ใน Emacs เปิดเชลล์ใหม่เป็นเชลล์ที่ไม่ใช่การเข้าสู่ระบบ

ฉันได้เพิ่มบรรทัดนี้ไปที่/etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

มันเปลี่ยนค่าของPATHกระบวนการ launchd รูท ค่าถูกสืบทอดโดยกระบวนการอื่น ๆ ทั้งหมดรวมถึงกระบวนการ launchd ต่อผู้ใช้ คุณสามารถใช้การเปลี่ยนแปลงกับการ/etc/launchd.confรีสตาร์ทหรือโดยการเรียกใช้launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confและเรียกใช้กระบวนการใหม่

บน OS X ~/.profileจะไม่อ่านเมื่อคุณเข้าสู่ระบบแบบกราฟิก หากทั้งสอง~/.bash_profileและ~/.profileอยู่ทุบตีไม่ได้อ่าน~/.profileทั้ง

~/.MacOSX/environment.plist หยุดทำงานใน 10.8

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.