มีไฟล์ Bash ที่จะมีแหล่งที่มาในโหมดอินเตอร์แอคทีฟเสมอไม่ว่าจะเป็นการเข้าสู่ระบบหรือไม่เข้าสู่ระบบ?


10

เท่าที่ฉันรู้เปลือกโต้ตอบอาจเข้าสู่ระบบหรือไม่เข้าสู่ระบบและไฟล์เริ่มต้นสำหรับพวกเขาจะแตกต่างกัน

  • ถ้าโต้ตอบ + เปลือกเข้าสู่ระบบ→ /etc/profileแล้วอ่านครั้งแรก~/.bash_profile, ~/.bash_loginและ~/.profile
  • หากเปลือกแบบโต้ตอบ + ที่ไม่ใช่การเข้าสู่ระบบ→ /etc/bash.bashrcแล้ว~/.bashrc

ฉันต้องการตั้งค่าตัวแปรบางอย่างทุกครั้งที่ฉันใช้เชลล์แบบโต้ตอบโดยไม่คำนึงว่ามันเป็นเชลล์ล็อกอินหรือไม่



1
@strugee ไม่คำถามนี้ไม่เกี่ยวกับตัวแปรสภาพแวดล้อม
Gilles 'หยุดความชั่วร้าย'

@Gilles ใช่ แต่คำตอบของคุณใช้ได้ดีพอ ๆ กัน
strugee

1
@strugee นั่นเป็นเพราะฉันไปเกินคำถามทันทีและสัมผัสกับหัวข้ออุปกรณ์ต่อพ่วง หนึ่งย่อหน้าในหนึ่งคำตอบไม่ได้ซ้ำกัน คำถามจะซ้ำกันหากพวกเขามีคำตอบที่เหมือนกันอย่างมีนัยสำคัญไม่ใช่ถ้าหนึ่งคำตอบเกิดขึ้นมีเนื้อหาเพียงพอที่จะตอบคำถามที่สอง
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


10

ไม่ไม่มี ใช่นี่เป็นข้อบกพร่องในการออกแบบ

ใช้เนื้อหาต่อไปนี้ใน~/.bash_profile:

if [ -e ~/.profile ]; then . ~/.profile; fi
if [[ -e ~/.bashrc && $- = *i* ]]; then . ~/.bashrc; fi

ระวังว่า bash นั้นมีมุมมองที่แปลกกว่าเดิม: เมื่อมันเป็นเชลล์ล็อกอินที่ไม่โต้ตอบและกระบวนการพาเรนต์คือrshdหรือsshd, bash source ~/.bashrc(แต่ไม่ใช่~/.bash_profileหรือ~/.profile) ดังนั้นคุณอาจต้องการวางสิ่งนี้ไว้ที่ด้านบนของ.bashrc:

if [[ $- != *i* ]]; then return; fi

ดูเพิ่มเติมความแตกต่างระหว่าง. bashrc และ. bash_profileและความแตกต่างระหว่างล็อกอินเชลล์และเชลล์ที่ไม่ใช่ล็อกอิน?


นิสัยใจคอเหล่านั้นมีเหตุผลด้านความปลอดภัย (ไม่โหลดไฟล์ที่ไม่คาดคิดเมื่อทำงานในการตั้งค่าความปลอดภัย)
vonbrand

2
@ vonbrand Er อะไรนะ ไม่นิสัยใจคอเหล่านี้ไม่มีอะไรเกี่ยวข้องกับความปลอดภัยอย่างแน่นอน ไม่มี "ไฟล์ที่ไม่คาดคิด" ที่เกี่ยวข้อง (ยกเว้นว่าการโหลด.bashrcในการตั้งค่าแบบไม่โต้ตอบอาจนับได้ว่าเป็นสิ่งที่คาดไม่ถึง) และการตรวจสอบบริบทด้านความปลอดภัยใด ๆ
Gilles 'หยุดความชั่วร้าย'

นี่เป็นวิธีการป้องกันการวนซ้ำไหม?
Braiam

1
@Braiam ลูปคืออะไร?
Gilles 'SO- หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.