เหตุใดแหล่ง Mac OS X จึงไม่ ~ / .bashrc [ซ้ำ]


95

คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:

ฉันพบผู้คนมากมายคิดว่าทำไมการสอนแบบนี้:

Put X to your ~/.bashrc and you can do Y

ไม่ทำงาน

ปรากฎเสมอว่าไฟล์เริ่มต้นของ bash ของ Mac OS X (หรือ Bash ของ Mac เอง) ไม่ได้แหล่งไฟล์ ~ / .bashrc ไม่ว่าจะเป็นในเชลล์การเข้าสู่ระบบหรือในเชลล์ที่เกิดจากระบบหน้าต่างเช่นแอพ Terminal ใน Mac OS X)

เหตุใดจึงเป็นเช่นนี้เมื่อระบบ Unix อื่น ๆ ทั้งหมดที่มี Bash ที่ฉันเคยทำงานด้วยมาก่อนทำเช่นนี้?

PS:

ฉันพบสิ่งที่ตัวเองพูดทุบตีเกี่ยวกับไฟล์เริ่มต้น (ซึ่งอาจเป็นประโยชน์):

เมื่อ Bash ถูกเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบหรือเป็นเชลล์ที่ไม่มีการโต้ตอบกับตัวเลือก --login มันจะอ่านและเรียกใช้คำสั่งจากไฟล์ / etc / profile ก่อนหากไฟล์นั้นมีอยู่ หลังจากอ่านไฟล์นั้นจะค้นหา ~ / .bash_profile, ~ / .bash_login และ ~ / .profile ตามลำดับและอ่านและเรียกใช้คำสั่งจากไฟล์แรกที่มีอยู่และอ่านได้ ตัวเลือก --noprofile อาจถูกใช้เมื่อเชลล์เริ่มต้นเพื่อยับยั้งพฤติกรรมนี้

ที่มา: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files


ฉันยังพบว่า~/.bash_profileมีการดำเนินการ ~/.bashrcแต่ไม่ ที่แปลก
igaurav

คำตอบ:


90

ใน OSX เทอร์มินัลโดยค่าเริ่มต้นจะเริ่มเซสชันการเข้าสู่ระบบเพื่ออ่าน. bash_profile เป็นต้น (กระบวนการเข้าสู่ระบบ GUI ที่ขอชื่อและรหัสผ่านของคุณไม่ได้ใช้เชลล์สคริปต์และไม่เริ่มเชลล์ใด ๆ ทั้งหมดจาก launchd และพื้นที่ทำงาน)

ใน Unices xterm อื่น ๆ จะเรียกใช้ non login shell โดยค่าเริ่มต้นดังนั้นพวกเขาจึงอ่าน. bashrc เป็นสคริปต์ที่แสดงรหัสผ่านของคุณ ฯลฯ เมื่อเข้าสู่ระบบการเข้าสู่เซสชันการเข้าสู่ระบบและเทอร์มินัลทั้งหมดเป็นกระบวนการย่อย

จากเอกสาร GNU ที่คุณอ้างถึง

เรียกใช้เป็นเชลล์ที่ไม่ใช่การล็อกอินแบบโต้ตอบ

เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน Bash จะอ่านและดำเนินการคำสั่งจาก ~ / .bashrc หากไฟล์นั้นมีอยู่ สิ่งนี้อาจถูกยับยั้งโดยใช้ตัวเลือก --norc ตัวเลือกไฟล์ --rcfile จะบังคับให้ Bash อ่านและดำเนินการคำสั่งจากไฟล์แทน ~ / .bashrc

ดังนั้นโดยปกติแล้ว ~ / .bash_profile ของคุณจะมีบรรทัด

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

หลังจาก (หรือก่อนหน้า) การกำหนดค่าเริ่มต้นเฉพาะสำหรับการเข้าสู่ระบบใด ๆ


7
Unicies = Unixes?
Paul Brewczynski

8
ดีที่ฉันหมายถึง - ฉันเช่าภาษาละตินที่โรงเรียนเพื่อกำจัดรูปแบบพหูพจน์ - ดูen.wikipedia.org/wiki/Unix
user151019

8
... และรูปแบบที่ 3 "Unixen" (แต่ฉันชอบ Unices)
earcam

7
และสี่ "ยูนิคอร์น" ...
tink

8
อย่าลืมรูปแบบว่างเช่น "ขันที"
smatthewenglish

19

bashอ่าน.bashrcสำหรับเชลล์ที่ไม่ใช่การล็อกอินเท่านั้น :

เมื่อเชลล์เชิงโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน bash จะอ่านและดำเนินการคำสั่งจาก ~ / .bashrc หากไฟล์นั้นมีอยู่ สิ่งนี้อาจถูกยับยั้งโดยใช้ตัวเลือก --norc ตัวเลือกไฟล์ --rcfile จะบังคับให้ทุบตีเพื่ออ่านและดำเนินการคำสั่งจากไฟล์แทน ~ / .bashrc

ในฐานะที่เป็นเทอร์มินัลเริ่มต้นbashเป็นเปลือกเข้าสู่ระบบ (เรียกใช้wเพื่อดูว่าbashอินสแตนซ์จะดำเนินการตาม-bash) .bashrcจะไม่อ่านโดยอัตโนมัติ


ดังนั้นประเด็นก็คือแอพ Termina บน Mac OS X จะสร้างอินสแตนซ์ของ "การเข้าสู่ระบบ" ของการทุบตีเสมอ ทำไม หากคุณไม่ได้เข้าสู่ระบบจริงๆ (คุณเข้าสู่ระบบก่อนหน้านี้จาก GUI)
Paul Brewczynski

ทำไมระบบยูนิกซ์อื่น ๆ ถึงอ่าน ~ / .bashrc
Paul Brewczynski

3
ไม่มีใครอยู่ที่นี่ในฐานะที่จะอธิบายการตัดสินใจออกแบบโดย Apple ฉันสามารถโต้เถียงทั้งสองฝ่ายได้อย่างง่ายดาย แต่สิ่งนี้ก็ไม่ได้ช่วยอะไรเช่นกัน ดังนั้นให้ยอมรับมันเพราะมันน่าจะเป็นตัวเลือกที่ดีที่สุด
nohillside

เป็นครั้งแรกที่คุณรันเชลล์เนื่องจากเป็นล็อกอินใน Unices พื้นฐาน X11 ที่คุณเริ่มต้นโดยรันเชลล์ซึ่งรัน X ดังนั้นจึงไม่ใช่ X ล็อกอิน
user151019

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