.bashrc
เป็นไฟล์กำหนดค่าของ bash เฉพาะเมื่อดำเนินการแบบโต้ตอบ มันจะโหลดเมื่อคุณเริ่มทุบตีเท่านั้นไม่ใช่เมื่อคุณเรียกใช้โปรแกรมอื่นเช่นsh
(แม้ว่าจะมีการเรียกใช้การทุบตีผ่านชื่อsh
) -c
และมันก็โหลดเฉพาะเมื่อมีการโต้ตอบทุบตีไม่เมื่อมันรันสคริปต์หรือคำสั่งด้วย
sudo sh -c 'echo $PATH'
หรือsudo bash -c 'echo $PATH'
ไม่เรียกใช้เชลล์แบบโต้ตอบดังนั้นจึง.bashrc
ไม่เกี่ยวข้อง
sudo su; echo $PATH
รันอินสแตนซ์แบบโต้ตอบของเชลล์รูท ถ้าทุบตีแล้ว~root/.bashrc
โหลด ตัวอย่างนี้เรียกใช้งานecho $PATH
เมื่อเชลล์แบบโต้ตอบนี้สิ้นสุดลงดังนั้นสิ่งที่เกิดขึ้นในเชลล์แบบโต้ตอบจะไม่มีผลกับสิ่งที่ตัวอย่างข้อมูลพิมพ์ในตอนท้าย แต่ถ้าคุณพิมพ์echo $PATH
พรอมต์ของเปลือกโต้ตอบที่ตั้งขึ้นโดยคุณจะเห็นชุดค่าโดยsudo su
~root/.bashrc
เนื่องจาก.bashrc
ถูกเรียกใช้ในแต่ละเชลล์แบบโต้ตอบไม่ใช่โดยเชลล์ล็อกอิน (ไม่ใช่แม้แต่เชลล์ล็อกอินแบบโต้ตอบซึ่งเป็นข้อบกพร่องการออกแบบในการทุบตี) มันเป็นสถานที่ที่ผิดที่จะกำหนดตัวแปรสภาพแวดล้อม ใช้.bashrc
สำหรับการตั้งค่า bash แบบโต้ตอบเช่นการเชื่อมโยงคีย์นามแฝงและการตั้งค่าความสมบูรณ์ ตั้งค่าตัวแปรสภาพแวดล้อมในแฟ้มที่จะโหลดเมื่อคุณเข้าสู่ระบบ: หรือ~/.pam_environment
~/.profile
ดังนั้นการตั้งค่าPATH
ใน.profile
แทน.bashrc
และทั้งเรียกใช้เปลือกเข้าสู่ระบบด้วยsudo -i 'echo $PATH'
หรืออย่างชัดเจนแหล่งที่มาด้วย.profile
sudo sh -c '. ~/.profile; echo $PATH'