อะไรคือความแตกต่างระหว่าง“ echo $ PATH” และ / etc / path?


10

เมื่อฉันสะท้อน $ PATH ฉันจะได้รับสิ่งนี้: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

ฉันต้องการลบพา ธ บางส่วนออกจากสิ่งนี้ แต่เมื่อฉันเปิดไฟล์โดยใช้คำสั่งvim /etc/pathsฉันจะได้ผลลัพธ์ต่อไปนี้:

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

ไฟล์ / etc / path แตกต่างจากตัวแปร $ PATH หรือไม่?


OS X รุ่นใด ฉันไม่มี/etc/pathsของฉัน แต่ฉันกำลังวิ่ง10.4.11และสิ่งต่าง ๆ อาจมีการเปลี่ยนแปลงตั้งแต่นั้นมา
Fox

1
แต่ตามคำตอบ AskDifferent , /etc/pathsใช้ในการสร้างเริ่มต้น$PATHที่คุณสามารถปรับเปลี่ยนในภายหลัง
ฟ็อกซ์

มันเป็นค่าเริ่มต้น เมื่อถึงเวลาที่ผู้ใช้เริ่มเชลล์พวกมันจะถูกแก้ไขโดยไฟล์อื่น ๆ ที่เชลล์ซอร์สเช่น~/.bashrcหรือ~/.profile
Sergiy Kolodyazhnyy

คำตอบ:


14

/etc/pathsเป็นส่วนหนึ่งของสิ่งที่ใช้ในการตั้งค่า$PATHสำหรับกระบวนการเชลล์ เมื่อคุณเปิดหน้าต่าง terminal ใหม่ก็เริ่มต้นbashซึ่งไหลสคริปต์เริ่มต้นหลาย/etc/profileและ~/.bash_profileOR (หากไม่ได้อยู่) ~/.bash_loginOR ~/.profile(หากไม่ได้อยู่อย่างใดอย่างหนึ่ง) $PATHสคริปต์เหล่านี้ตั้งค่าสภาพแวดล้อมเปลือกรวมทั้ง

หนึ่งในสิ่งที่/etc/profileไม่ถูกเรียกใช้/usr/libexec/path_helperซึ่งอ่าน/etc/pathsและไฟล์ใด ๆ ในและเพิ่มเนื้อหาของพวกเขาไป/etc/paths.d $PATHแต่นี่เป็นเพียงจุดเริ่มต้น สคริปต์เริ่มต้นของคุณเอง (ถ้ามี) สามารถเพิ่ม$PATHแก้ไขแทนที่มันอย่างสมบูรณ์ ฯลฯ

ดูเหมือนว่าผมชอบสคริปต์เริ่มต้นของคุณ (และ / หรือสิ่งที่มันวิ่ง) /etc/pathsคือการเพิ่มจำนวนของรายการไปยังชุดพื้นฐานที่จะได้รับจาก "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" ถูกเพิ่มไปยังจุดเริ่มต้นของ$PATH(หมายถึงไดเรกทอรีเหล่านั้นจะถูกค้นหาก่อน) และ ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "ถูกเพิ่มในตอนท้าย หากคุณต้องการทราบว่ากำลังเพิ่มอะไรอยู่คุณต้องดูที่สคริปต์เริ่มต้นของคุณ

BTW กระบวนการนี้สำหรับการตั้งค่า$PATHใช้กับเชลล์ "ล็อกอิน" bash เท่านั้น สิ่งใดก็ตามที่ดำเนินการโดย bash shell จะสืบทอด$PATHมาจากมันดังนั้นอาจมีสิ่งเดียวกัน bash non-login shells ทำตามขั้นตอนการตั้งค่าที่แตกต่างกันบ้าง เปลือกหอยอื่น ๆ และสิ่งที่ไม่ได้เริ่มจากเปลือกที่ทั้งหมด (เช่น cron งาน) $PATHsอาจจะมีแตกต่างอย่างสิ้นเชิง


โปรดทราบว่าสำหรับเปลือกหอยที่ไม่ได้เข้าสู่ระบบ (เช่น/usr/local/bin/bashเป็นติดตั้งโดยbrewไม่ต้อง-lโต้แย้ง) /usr/libexec/path_helperไม่ได้ใช้และไม่ได้รวมโดยเริ่มต้นใน/usr/local/bin $PATHที่จะใช้ในสคริปต์หรือโต้ตอบคำสั่งคือpath_helper eval $(/usr/libexec/path_helper)
Kyle Strand

0

สถานที่แรกที่ฉันต้องการตรวจสอบเพื่อแก้ไขคือ

~/.profile
~/.bashrc
~/.bash_profile

หากคุณกำลังใช้สิ่งที่ไม่ใช่ Bash ให้ตรวจสอบไฟล์การกำหนดค่าเพื่อดูการพูดถึง PATH

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