แนวคิดคือผู้ใช้ควรมี (อย่างน้อยที่สุด) หนึ่งเชลล์ล็อกอินต่อโฮสต์ (บางทีฉันควรจะพูดว่าหนึ่งล็อกอินเชลล์ต่อโฮสต์ต่อเทอร์มินัล - ถ้าคุณล็อกอินพร้อมกันผ่านโฮสต์หลายเทอร์มินัลคุณคาดว่าจะมีเชลล์ล็อกอินหลายอัน) โดยปกติแล้วนี่จะเป็นเชลล์แรกเมื่อเข้าสู่ระบบ (จึงชื่อ) ดังนั้นโครงร่างนี้อนุญาตให้คุณระบุการกระทำที่คุณต้องการให้เกิดขึ้นเพียงครั้งเดียวต่อการเข้าสู่ระบบและสิ่งที่คุณต้องการให้เกิดขึ้นทุกครั้งที่คุณเริ่มเชลล์ใหม่ (แบบโต้ตอบ)
โดยปกติทุกเปลือกอื่น ๆ ที่คุณทำงานหลังจากที่เข้าสู่ระบบในจะเป็นลูกหลาน (ลูกของเด็กของเด็กที่ ... ) ของเปลือกเข้าสู่ระบบและดังนั้นจึงจะได้รับมรดกการตั้งค่าต่างๆ (ตัวแปรสภาพแวดล้อมumask
ฯลฯ ) จากเปลือกเข้าสู่ระบบ และตามความคิดที่ว่าไฟล์ที่เริ่มต้นการเข้าสู่ระบบ ( .login
, .profile
ฯลฯ ) ควรตั้งค่าที่สืบทอดและให้.bashrc
(หรือสิ่งอื่นที่คุณใช้) จัดการกับคนที่ไม่ได้ ( set
, shopt
ไม่ใช่ส่งออกตัวแปรเปลือก ฯลฯ )
ความคิดอื่นคือไฟล์การเริ่มต้นการเข้าสู่ระบบ (และพวกเขาเท่านั้น) ควรทำ "ยกหนัก" คือการกระทำที่ใช้ทรัพยากรมาก ตัวอย่างเช่นคุณอาจต้องการให้กระบวนการบางอย่างทำงานในพื้นหลังเมื่อใดก็ตามที่คุณลงชื่อเข้าใช้ (แต่มีเพียงหนึ่งสำเนาเท่านั้น) คุณอาจต้องการให้ข้อมูลสถานะบางอย่าง (เช่นdf
หรือwho
) ปรากฏขึ้นเมื่อคุณเข้าสู่ระบบ แต่ไม่ใช่ทุกครั้งที่คุณเริ่มเชลล์เชิงโต้ตอบใหม่ โดยเฉพาะถ้าคุณมีการโต้ตอบโปรแกรม / กล่องโต้ตอบ (เช่นที่ต้องการข้อมูลจากคุณ) ที่คุณต้องการเรียกใช้ทุกครั้งที่คุณลงชื่อเข้าใช้คุณอาจไม่ต้องการให้มันทำงานทุกครั้งที่คุณเริ่มเชลล์ใหม่ ตัวอย่างเมื่อยี่สิบปีก่อน Solaris ล็อกอินคุณเข้าสู่เชลล์เดี่ยวที่ไม่ใช่กราฟิกและไม่ใช่หน้าต่าง (ผมเชื่อว่ามันมีการเปลี่ยนแปลงตั้งแต่นั้น.) มันเป็นงานของ.login
หรือ.profile
(หรืออะไรก็ตาม) เพื่อเริ่มระบบ windowing startx
มีคำสั่งเช่น (สิ่งนี้มีประโยชน์ส่วนหนึ่งเพราะมีหลายระบบหน้าต่างที่มีผู้ใช้ที่แตกต่างกันมีการตั้งค่าที่แตกต่างกันผู้ใช้บางคนใช้ระบบที่แตกต่างกันในสถานการณ์ที่แตกต่างกันและเรามีกล่องโต้ตอบใน.profile
คำถามที่ถามว่า เห็นได้ชัดว่าคุณไม่ต้องการให้มันทำงานทุกครั้งที่คุณเปิดหน้าต่างใหม่หรือพิมพ์sh
.
เป็นเวลานานแล้วที่ข้าใช้สิ่งอื่นนอกเหนือจากbash
กรณีขอบ (ตัวอย่างเช่นฉันเขียนสคริปต์ด้วย#!/bin/sh
ดังนั้นในบางระบบสคริปต์ของฉันทำงานด้วยdash
และในคนอื่น ๆ ที่ทำงานด้วยbash
ในโหมด POSIX สองสามครั้งต่อปีที่ฉันเรียกใช้csh
/ tcsh
สำหรับสองสามนาทีเพื่อดูว่ามันจัดการบางสิ่งบางอย่างหรือ ตอบคำถาม) หากคุณใช้เชลล์หลาย ๆ ตัว (เช่นbash
และzsh
) ทุกวันรูปแบบของคุณอาจแตกต่างกัน หากเชลล์หลักของคุณ (ตามที่กำหนดไว้/etc/passwd
) คือbash
คุณอาจต้องการเรียกใช้zsh
ล็อกอินเชลล์และจากนั้นอาจเรียกเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบบางzsh
สังกัด คุณควรหลีกเลี่ยงการใช้ล็อกอินเชลล์ที่อยู่ใต้เชลล์ล็อกอินอื่นที่เป็นประเภทเดียวกัน
ตามที่ระบุไว้ในความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอิน? แอปพลิเคชัน OS X Terminal รันเชลล์ล็อกอินดังนั้นผู้ใช้ทั่วไปจะมี“ เชลล์ล็อกอิน” หลายรายการพร้อมกัน นี่เป็นโมเดลที่แตกต่างจากที่ฉันได้อธิบายไว้ข้างต้นและอาจต้องการให้ผู้ใช้คิดใหม่ว่าเขาทำอะไรใน.login
หรือ.profile
ไฟล์ (หรืออะไรก็ตาม) ฉันไม่ทราบว่านักพัฒนา OS X ได้บันทึกเหตุผลของพวกเขาสำหรับการตัดสินใจออกแบบนี้หรือไม่ แต่ฉันสามารถจินตนาการถึงสถานการณ์ที่สิ่งนี้จะเป็นประโยชน์ มีเวลาที่ฉันเปิดหน้าต่างเชลล์จำนวนหนึ่งเมื่อฉันลงชื่อเข้าใช้เป็นประจำและฉันจะตั้งค่าให้เป็นสีข้อความและพื้นหลังที่แตกต่างกัน (โดยเขียน ANSI escape sequences ไปที่หน้าจอ) เพื่อช่วยฉันติดตามสิ่งที่อยู่ สีเทอร์มินัลเป็นตัวอย่างของสิ่งที่ไม่ได้สืบทอดโดย children-of-children แต่ยังคงอยู่ภายในหน้าต่าง ดังนั้นนี่คือสิ่งที่คุณต้องการทำทุกครั้งที่คุณเริ่มหน้าต่างเทอร์มินัลใหม่ แต่ไม่ใช่ทุกครั้งที่คุณเริ่มเชลล์เชิงโต้ตอบใหม่