โดยปกติแล้วจะbashแหล่ง~/.bashrcไฟล์สคริปต์เริ่มต้นของคุณสำหรับเชลล์แบบโต้ตอบและไม่ใช่การเข้าสู่ระบบเท่านั้น
โดยปกติแล้วจะbashแหล่งที่มาของ~/.profileไฟล์สคริปต์เริ่มต้นของคุณสำหรับเปลือกเข้าสู่ระบบแบบโต้ตอบ
โดยปกติ Terminal.app จะถือว่าหน้าต่างเทอร์มินัลใหม่เป็นเชลล์ล็อกอินแบบโต้ตอบ
ดังนั้นในสถานการณ์ปกติคุณ~/.profileจะได้รับการอ่านและดำเนินการเท่านั้น คุณ~/.bashrcไม่เคยได้รับการอ่านและดำเนินการ
เพื่อแก้ปัญหานี้ฉันมักจะสร้างสคริปต์เริ่มต้นเชลล์ชื่อ~/.profile(หากยังไม่มีอยู่) และฉันเพิ่มคำสั่งต่อไปนี้ลงในไฟล์ดังกล่าวเพื่อตรวจสอบว่ามี~/.bashrcไฟล์อยู่หรือไม่และอ่านจากแหล่งที่มาดำเนินการภายในกระบวนการเชลล์ปัจจุบันไม่ใช่ subshell) หากมีอยู่:
test -f ~/.bashrc && source ~/.bashrc
การสร้างใหม่ตามที่ร้องขอ:
แอป Terminal ของ Mac OS X จะเรียกใช้เชลล์ของคุณ ( bash) ในโหมด "เข้าสู่ระบบ" เมื่อมีการเรียกใช้ในโหมดเข้าสู่ระบบก็ไม่ได้อ่านbash / ดำเนินการ ~/.bashrcแต่จะอ่านและดำเนินการ~/.profileแทน หากคุณต้องการใส่สิ่งต่าง ๆ ลงในนั้น~/.bashrcและให้พวกเขาอ่านและดำเนินการในหน้าต่าง Terminal ใหม่ทุกครั้งคุณจะต้องสร้างเชลล์สคริปต์ไฟล์ชื่อ~/.profileและให้ไฟล์นั้นมีคำสั่งที่ค้นหา~/.bashrcและอ่านและดำเนินการ
ในกรณีที่คำกริยา "source" โยนคุณออก: "sourcing" ไฟล์สคริปต์เชลล์คือเมื่อเชลล์ (เช่นbash) อ่านคำสั่งเชลล์จากไฟล์และเรียกใช้คำสั่งเหล่านั้นในกระบวนการเชลล์ปัจจุบันจึงส่งผลกระทบต่อสภาพแวดล้อมของปัจจุบัน กระบวนการเปลือก โดยปกติเชลล์สคริปต์ไฟล์อื่น ๆ ที่คุณเขียนไม่ได้มา ; แต่จะถูกดำเนินการใน sub-shell (อินสแตนซ์แยกต่างหากหรือสำเนาbash) และพวกเขาไม่สามารถเปลี่ยนแปลงสิ่งใดในสภาพแวดล้อมของ parent parent (อินสแตนซ์หลักของbashที่เริ่มต้นเมื่อคุณเปิดหน้าต่าง Terminal ใหม่)
ในการรับเชลล์ไปยังซอร์สสคริปต์คุณใช้sourceคำสั่งซึ่งสร้างไว้ในเชลล์ ช็อตคัตสำหรับsourceคำสั่งคือ.(ใช่เพียงแค่ตัวอักษรจุด / ระยะเวลา / ตัวอักษรเต็มหยุด) ในเวอร์ชันก่อนหน้าของคำตอบนี้ฉันใช้.โอเปอเรเตอร์แทนsourceคำสั่ง