$ PATH ได้รับการตั้งค่าใน OS X 10.6 Snow Leopard ที่ไหน?


139

ฉันพิมพ์echo $PATHบนบรรทัดคำสั่งและรับ

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

ฉันสงสัยว่าไฟล์นี้จะถูกตั้งไว้ที่ใดเนื่องจาก.bash_loginไฟล์ของฉันว่างเปล่า

ฉันกังวลเป็นพิเศษว่าหลังจากติดตั้ง MacPorts แล้วมันติดตั้งขยะจำนวน/optมาก ฉันไม่คิดว่าไดเรกทอรีนั้นจะมีอยู่ในการติดตั้ง Mac OS X ปกติ

ปรับปรุง:ขอบคุณjtimbermanสำหรับการแก้ไขecho $PATHคำสั่งของฉัน


5
ความคิดเห็นจากSMcCandlish :easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat

@Satya ดูเหมือนว่าฉัน/etc/paths.dจะมีประโยชน์สำหรับสคริปต์การติดตั้ง /etc/paths.dหากต้องการติดตั้งสคริปต์ของฉันที่จะเพิ่มโปรแกรมที่ติดตั้งไปยังเส้นทางที่ฉันสามารถวางไฟล์ใน หากฉันต้องการแก้ไขเส้นทางด้วยตนเอง/etc/pathsเป็นตัวเลือกที่ดีกว่า
haydenmuhl

ฉันได้สร้างสคริปต์ส่วนใหญ่ตามโพสต์นี้ซึ่งพิมพ์ได้อย่างรวดเร็วโดยที่ PATH ถูกกำหนดตามสถานที่หลายแห่งเหล่านี้: gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

คำตอบ:


161

เมื่อbashเริ่มต้นมันจะอ่านไฟล์ต่อไปนี้ทุกครั้งที่คุณเข้าสู่ระบบ สำหรับวัตถุประสงค์ของ OS X หมายถึงทุกครั้งที่คุณเปิดTerminalหน้าต่างใหม่

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

เมื่อคุณเริ่มเชลล์ใหม่โดยพิมพ์bashบนบรรทัดคำสั่งเชลล์จะอ่าน.bashrc

OS X ยังใช้~/.MacOSX/environment.plistเพื่อตั้งค่าตัวแปรสภาพแวดล้อมเพิ่มเติมรวมถึงเส้นทางหากจำเป็น

ในที่สุด/etc/pathsและ/etc/paths.dจะถูกอ่านโดยเปลือกด้วย


/opt/local/bin~/.tcshrcMacPorts ถูกเพิ่มเข้ามา ~/.cshrcนอกจากนี้จะต้องแน่ใจว่าจะมองใน


5
เห็นได้ชัด~/.MacOSX/environment.plistว่าไม่ได้ผลสำหรับบางคน ในChange Path สำหรับ OS X/etc/paths.dจะมีการอธิบายวิธีการสำรองโดยใช้โฟลเดอร์ ฉันไม่ได้ทดสอบสิ่งนั้น
Arjan

+1 ~/.cshrcสำหรับ ถั่วพยายามที่จะคิดออกว่าทำไม~/.profileไม่ทำงาน
tomlogic

ฉันคิดว่าคำตอบนี้ไม่สมบูรณ์ ฉันพยายามที่จะหาเส้นทางที่ผิดพลาด (ไม่มีอยู่): / usr / bin / local, shell ของฉันบ่นเกี่ยวกับและมันไม่ได้อยู่ในไฟล์เหล่านั้น
ทอมมี่

ฉันคิดว่า.bashrcอ่านไม่ว่าคุณจะพิมพ์bashหรือไม่ก็ตาม
Xiao Peng - ZenUML.com

48

ลองดูที่ไฟล์/etc/pathsซึ่งจะถูกใช้โดยซึ่งถูกใช้โดย /usr/libexec/path_helper/etc/profile

สำหรับ MacPorts ให้ใช้sudo /etc/paths/opt/local/binและเปิดหน้าต่างเทอร์มินัลอีกครั้ง


25

อย่างจริงจัง Leopard ทำให้เรามีวิธีใหม่ในการเพิ่มเส้นทาง เพียงสร้างไฟล์ที่มีส่วนของพา ธ ที่คุณต้องการเพิ่มและวางไว้ใน /etc/paths.d

ตัวอย่างรวดเร็วของการทำสิ่งนี้ในขั้นตอนเดียวคือ:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

มิฉะนั้นคุณสามารถไปที่ /etc/paths.d และวางไฟล์ไว้ที่นั่นโดยตรง ไม่ว่าจะด้วยวิธีใดส่วนของพา ธ ในไฟล์ในไดเรกทอรีนั้นจะถูกผนวกเข้ากับพา ธ เริ่มต้น

ยังใช้งานได้กับ manpath

นี่คือลิงค์ไปยังรายละเอียดเพิ่มเติม:

ars technica: ฉันจะเพิ่มบางอย่างใน PATH ในเสือดาวหิมะได้อย่างไร

ในหมายเหตุที่ 2: MacPorts ใส่ทุกอย่างลงในไดเรกทอรี opt อย่างแม่นยำเพราะไม่ได้ใช้โดยสิ่งของของ Apple ด้วยวิธีนี้จะไม่ขัดแย้ง คำแนะนำ (เขียนอย่างดีเยี่ยม BTW) มีคำอธิบายว่าทำไมจึงใช้ opt และวิธีเปลี่ยนค่าเริ่มต้นหากคุณต้องการ

คู่มือ MacPorts


เด็ดมาก ตอนนี้เราเพียงแค่ต้องรับพา ธ แอปพลิเคชั่นเหล่านั้นเพื่อไม่ก่อให้เกิดมลพิษไฟล์โปรไฟล์ของเราอีกต่อไป ...
Daniel Beck

รักมัน Simple!
Andrew Hedges

ความคิดเห็นจากSMcCandlish :I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat

บรรทัดเดียวไม่มีการต่อท้ายไฟล์และการลบออกง่าย รักสิ่งนี้. ขอบคุณลีแอนน์
อิบราฮิม Lawal

4

หากต้องการแสดงเส้นทางของคุณ echo $ PATH

echo $PATH

การกำหนดเส้นทางของคุณแก้ไขไม่ได้~/.bash_profile~/.bash_login


3

นอกจากนี้ยังมีเส้นทางที่กำหนดโดยSSH

เปรียบเทียบไปecho $PATH ssh localhost 'echo $PATH'เนื่องจาก ssh ไม่อ่าน / etc / profile, / usr / libexec / path_helper ไม่ทำงานและทำให้ / etc / path ถูกข้ามไป ssh localhost 'source /etc/profile; echo $PATH'ตอนนี้พยายาม เส้นทางควรอยู่ใกล้กว่า ความแตกต่างที่เหลืออยู่อาจเป็นเพราะการปรับเปลี่ยนพา ธ ใน. bash_profile ของคุณ (ซึ่งถูกข้ามด้วย ssh) และ. bashrc (ซึ่งอ่านโดย ssh)

หากคุณต้องการให้พา ธ SSH ของคุณคล้ายกับเส้นทางเทอร์มินัลปกติของคุณคุณสามารถเพิ่มลงsource /etc/profileใน. bashrc ของคุณ


ขอบคุณสำหรับคำใบ้! ฉันกำลังมองหาวิธีแก้ปัญหาด้วย ssh svn + ssh หาคำสั่ง svnserve ไม่ได้เพราะเส้นทางไปยัง svnserve อยู่ใน. profile แต่ไม่ได้อยู่ใน. bashrc
KIR

2

มันสามารถกำหนดได้ทั้ง:

  • ตัวแปรระบบ - /etc/paths
  • ตัวแปรผู้ใช้ - ดูคำอธิบายของ @Steve Folly

1

จริงๆแล้วมันถูกเก็บไว้ใน.profileไฟล์ของคุณแทน.bash_loginและเป็นเรื่องปกติที่ MacPort จะใช้.bash_loginไฟล์นี้แทนไฟล์

นอกจากนี้/optไดเรกทอรีมักจะถูกสร้างขึ้นโดย MacPorts และจะเก็บไฟล์ไว้ในโฟลเดอร์นี้


1

เกี่ยวกับเอกสารสำหรับ/usr/libexec/path_helperยูทิลิตี้ส่วนประกอบเริ่มต้นสำหรับ $ PATH ถูกนำมาจาก/etc/pathsและโดยค่าเริ่มต้นดูเหมือนว่า

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

สำหรับ OS-X Snow Leopard

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