ใน 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 หรือเป็นอิสระจากเทอร์มินัลอีมูเลเตอร์หรือไม่?