เหตุใด. โปรไฟล์ (และไม่ใช่. bashrc) จะเพิ่ม ~ / bin ไปยังเส้นทาง


9

ตั้งแต่.bashrcมีมากขึ้น "ทั่วไป" (ในแง่ที่ว่า.profileแหล่งที่มาของมัน) ทำไม "รวมถึง~/binเส้นทาง" ขั้นตอนไม่ได้ภายใน.bashrc? ทำไมผู้ใช้ไม่ต้องการในเชลล์ที่ไม่ใช่การเข้าสู่ระบบ? (โดยเฉพาะอย่างยิ่งทุกวันนี้ที่เชลล์ที่ไม่ใช่การเข้าสู่ระบบเป็นเรื่องธรรมดามากขึ้น *)

ฉันรู้ว่าฉันสามารถทำการเปลี่ยนแปลงดังกล่าวได้ด้วยตนเอง แต่ฉันต้องการทราบว่ามีเหตุผลหรือไม่

* พิสูจน์ไม่ได้ แต่ฉันคิดว่าเป็นอย่างนั้น

คำตอบ:


13

~/.bashrcและ/etc/bash.bashrcจะถูกเรียกใช้ทุกครั้งที่bashเชลล์แบบโต้ตอบเริ่มทำงาน

ในทางตรงกันข้าม~/.profileและ/etc/profileจะทำงานทุกครั้งที่มีการเข้าสู่ระบบเชลล์เริ่มต้น ดังนั้นจึงไม่จำเป็นต้องเป็นbashเชลล์ แต่จำเป็นต้องเป็นเชลล์ล็อกอิน (และbashอินสแตนซ์เชลล์จำนวนมากไม่ใช่เชลล์ล็อกอิน )

  • bashเปลือกเปลือกที่โปรแกรมเปลือกที่ให้มันเป็นbashมากกว่าโปรแกรมอื่น ๆ dashบางอย่างเช่น
  • เปลือกเข้าสู่ระบบเป็นเปลือกที่เริ่มต้นโดยอัตโนมัติเป็นผลมาจากการเข้าสู่ระบบเพื่อให้ส่วนต่อประสานผู้ใช้ (กราฟิกหรือบรรทัดคำสั่ง) สำหรับการเข้าสู่ระบบ เมื่อออกจากการเข้าสู่ระบบเชลล์การเข้าสู่ระบบจะยุติลง

ดังนั้นการใส่คำชื่นชมที่ต่อท้ายรายการPATHในbashrcไฟล์จะ:

  1. ไม่ทำอะไรเลยเมื่อเปลือกไม่ได้bashซึ่งมักจะเป็นกรณี ตัวอย่างเช่นPATHจะไม่มีการแก้ไขเมื่อคุณอยู่ในเซสชันการเข้าสู่ระบบแบบกราฟิก โปรดจำไว้PATHว่าไม่ได้ถูกใช้โดยโปรแกรมบรรทัดคำสั่งเท่านั้น

  2. ต่อท้ายซ้ำแล้วซ้ำอีกในการปรากฏตัวของbashเปลือกที่ซ้อนกัน ดังนั้นถ้าคุณเริ่มต้นเปลือกภายในเปลือก - ซึ่งเป็นเรื่องธรรมดามากสำหรับหลากหลายเหตุผล - แล้วคุณจะมีหลายรายการซ้อนกันบนของคุณ~/bin PATHสิ่งนี้ทำให้PATHตัวแปรสภาพแวดล้อมอ่านยากและบางครั้งก็ลดประสิทธิภาพลง

สิ่งเหล่านี้จะไม่พึงประสงค์ ดังนั้นมันจะผิดที่จะใส่ลงในbashrcไฟล์ ~/.profileจริงๆมันอยู่ใน ~/.profileเป็นสถานที่ที่เหมาะสมสำหรับ:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

เชลล์ที่ไม่ได้ล็อกอินมีเชลล์ล็อกอิน (หรือบางอย่างที่ทำงานเหมือนเชลล์ล็อกอิน) เป็นพาเรนต์และสืบทอดตัวแปรสภาพแวดล้อมส่วนใหญ่รวมถึงPATHจากเชลล์ล็อกอินนี้ ดังนั้นการวางคำสั่งการแก้ไขพา ธ~/.profileให้คุณออกจากระบบและกลับมาใหม่เพื่อให้มีประสิทธิภาพ แต่จะมีผลต่อสภาพแวดล้อมของเชลล์ที่ไม่ใช่การล็อกอินด้วย (รวมถึงสภาพแวดล้อมของโปรแกรมที่ไม่ใช่เชลล์ด้วยเนื่องจากทุกโปรแกรมได้รับมา ชุดตัวแปรสภาพแวดล้อมของตัวเอง - เรียกว่า "สภาพแวดล้อม" - สืบทอดมาจากกระบวนการแม่)


ฉันเข้าใจ. แต่การตัดสินใจครั้งนี้ยังไม่สมเหตุสมผลสำหรับฉัน หากเทอร์มินัลเปิดตอนนี้โหลดเฉพาะ. bashrc ดังนั้นฉันจะไม่เห็นช่องส่วนตัวของฉัน
borges

@borges หากการกำหนดค่าเริ่มต้นไม่ได้ผลสำหรับคุณคุณควรเปลี่ยน (เป็นคอมพิวเตอร์ของคุณหลังจากทั้งหมดหรืออย่างน้อยก็ในบัญชีของคุณ) แต่ฟังดูเหมือนครั้งเดียว นั่นคือดูเหมือนว่าbinไดเรกทอรีส่วนตัวของคุณจะไม่มีอยู่เมื่อคุณเข้าสู่ระบบและคุณได้สร้างขึ้นในระหว่างการเข้าสู่ระบบนี้ PATHถ้าคุณออกจากระบบและกลับมาก็จะอยู่ในของคุณ เนื่องจากการสร้างbinไดเรกทอรีส่วนตัวของคุณเป็นสิ่งที่ต้องทำเพียงครั้งเดียวนี่เป็นความไม่สะดวกเพียงครั้งเดียว
Eliah Kagan

3

มันเป็นเพราะตัวแปรสภาพแวดล้อมแบบดั้งเดิมไปเฉพาะในหรือ/etc/profile ไฟล์สำหรับสิ่งที่ต้องการนามแฝงการตั้งค่าพรอมต์ตัวเลือกเปลือกและอื่น ๆ (เช่นสิ่งที่เกี่ยวข้องโดยตรงกับเปลือก).profilebashrc

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