ใน Linux และตามความรู้ของฉันระบบ Unix ทั้งหมดเทอร์มินัลอีมูเลเตอร์รันเชลล์แบบโต้ตอบและไม่ล็อกอินตามค่าเริ่มต้น ซึ่งหมายความว่าสำหรับทุบตีเปลือกเริ่มต้นจะ:
เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน bash จะอ่านและดำเนินการคำสั่งจาก
/etc/bash.bashrcและ~/.bashrcถ้ามีไฟล์เหล่านี้อยู่ สิ่งนี้อาจถูกยับยั้งโดยใช้--norcตัวเลือก
--rcfileตัวเลือกไฟล์จะบังคับทุบตีอ่านและรันคำสั่งจากไฟล์แทนและ/etc/bash.bashrc~/.bashrc
และสำหรับล็อกอินเชลล์:
เมื่อ bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบหรือเป็นเชลล์ที่ไม่มีการโต้ตอบพร้อมกับ
--loginตัวเลือกมันจะอ่านและเรียกใช้คำสั่งจากไฟล์/etc/profileก่อนหากไฟล์นั้นมีอยู่ หลังจากที่ได้อ่านแฟ้มที่จะมองหา~/.bash_profile,~/.bash_loginและ~/.profileในลำดับที่และอ่านและรันคำสั่งจากคนแรกที่มีอยู่และสามารถอ่านได้
--noprofileตัวเลือกที่อาจจะนำมาใช้เมื่อเปลือกจะเริ่มต้นในการยับยั้งการทำงานนี้
บน OSX อย่างไรก็ตามเชลล์เริ่มต้น (ซึ่งเป็น bash) เริ่มต้นในเทอร์มินัลเริ่มต้น (Terminal.app) จริง ๆ แล้วแหล่งที่มา~/.bash_profileหรือ~.profileอื่น ๆ กล่าวอีกนัยหนึ่งมันทำหน้าที่เหมือนเปลือกเข้าสู่ระบบ
คำถามหลัก : เหตุใดเชลล์การโต้ตอบเริ่มต้นคือเชลล์การเข้าสู่ระบบบน OSX เหตุใด OSX จึงเลือกทำเช่นนี้ ซึ่งหมายความว่าทุกคำแนะนำ / แบบฝึกหัดสำหรับสิ่งเปลือกตามที่กล่าวถึงการเปลี่ยนแปลงในสิ่งที่~/.bashrcจะล้มเหลวใน OSX ~/.profileหรือในทางกลับกันสำหรับ ถึงกระนั้นในขณะที่ข้อกล่าวหาจำนวนมากสามารถปรับระดับได้ที่ Apple การจ้าง devs ที่ไร้ความสามารถหรืองี่เง่าไม่ได้เป็นหนึ่งในนั้น สันนิษฐานว่าพวกเขามีเหตุผลที่ดีสำหรับเรื่องนี้ทำไม?
คำถามย่อย: Terminal.app ใช้งานเชลล์ล็อกอินแบบโต้ตอบหรือไม่หรือพวกเขาเปลี่ยนพฤติกรรมของ bash หรือไม่? สิ่งนี้เฉพาะเจาะจงกับ Terminal.app หรือเป็นอิสระจากเทอร์มินัลอีมูเลเตอร์หรือไม่?