ชุดตัวแปร $ PATH ของระบบอยู่ที่ไหน


10

ฉันใช้ Ubuntu Desktop 14.04 และฉันกำลังใช้เชลล์ที่ไม่ใช่การเข้าสู่ระบบ เมื่อฉันเปิดเทอร์มินัล GUI อันดับแรกเชลล์เซสชันที่ไม่ใช่การเข้าสู่ระบบจะอ่านไฟล์เริ่มต้นต่อไปนี้:

/etc/bash.bashrc
~/.bashrc

เปลือกหอยที่ไม่ได้เข้าสู่ระบบสืบทอดสิ่งแวดล้อมจากการปกครองซึ่งเป็นเปลือกเข้าสู่ระบบเพื่อให้เซสชั่นยังอ่านแฟ้มเริ่มต้นต่อไปนี้:

/etc/profile
~/.bash_profile

แต่ผมไม่สามารถหา$PATHสำหรับเส้นทางทั้งระบบชอบ/bin, /sbin, /usr/bin, /usr/sbinชุดในใด ๆ ของไฟล์เหล่านี้ ซึ่งเป็น$PATHที่ตั้งไว้สำหรับไดเรกทอรีเหล่านี้หรือไม่

คำตอบ:


16

ความกว้างของระบบ (ค่าเริ่มต้น) PATHถูกตั้งค่าใน/etc/environmentไฟล์

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

มันเป็นสถานที่ในการบันทึกตัวแปรสภาพแวดล้อมทั่วโลก


+1 อย่างไรก็ตามคุณรู้หรือไม่ว่า$PATHมันได้รับมาจากเปลือกเข้าสู่ระบบของผู้ปกครองหรือว่ามันถูกโหลดโดยแต่ละbashอินสแตนซ์?
kos

@kos กระบวนการทั้งหมดของเด็กได้รับสืบทอดสภาพแวดล้อมจากเปลือกแม่ยกเว้นว่าการทำงานในสภาพแวดล้อมที่มีการปรับเปลี่ยน ..
heemayl

ฉันสังเกตเห็นว่าเปลือกดูเหมือนจะไม่ขยาย$HOMEตัวแปร ตัวอย่างเช่นการเพิ่ม$HOME/.composer/vendor/binลงPATHใน/etc/environmentไม่ได้เปิดใช้งานไบนารีในไดเรกทอรีนี้ที่จะดำเนินการโดยไม่มีคำนำหน้าเส้นทาง การใช้~/.composer/vendor/binไม่ได้ผลเช่นกัน /home/vagrant/.composer/vendor/binฉันพบว่ามันจำเป็นที่จะเพิ่มเส้นทางแน่นอนเช่น: นี้ดูเหมือนว่าเกี่ยวข้อง ( แต่ไม่ได้อธิบายพฤติกรรมนี้): askubuntu.com/questions/402353/...
เบนจอห์นสัน

2
@BenJohnson นั่นเป็นเพราะ/etc/environment(และ~/.pam/environment) อ่านโดยpam_envโมดูล PAM ไม่ใช่ shell หรือสิ่งอื่นใดที่เข้าใจตัวแปร shell / environment; กันไปสำหรับ~การขยายตัว ดังนั้นคุณต้องใช้เส้นทางที่แน่นอนที่นั่น
heemayl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.