Bash ไม่โหลด ".profile" ในเซสชันใหม่บน Linux

Aug 16 2010

ฉันกำลังตั้งค่าเครื่อง Linux ใหม่ที่ได้รับจากแผนกไอทีของเราและสังเกตเห็นว่า.profileไม่มีการโหลดเมื่อฉันเริ่มเซสชันเทอร์มินัลใหม่ เชลล์ปัจจุบันคือBashแม้ว่าฉันจะเปลี่ยนจากค่าเริ่มต้นsh ที่มาพร้อมกับ ฉันจะโหลด.profileเมื่อเริ่มต้นได้อย่างไร

ฉันจะเข้าถึงเปลือกผ่านSSHssh myusername@remotemachine : ฉันมีสิทธิ์ของผู้ดูแลระบบ

คำตอบ

24 Pauseduntilfurthernotice. Aug 16 2010 at 14:38

เมื่อเริ่มทุบตีเป็นเปลือกเข้าสู่ระบบแบบโต้ตอบหนึ่งของไฟล์ที่มันอาจจะ~/.profileดำเนินการคือ

เมื่อเริ่มต้นเป็นเชลล์ที่ไม่ใช่ล็อกอินแบบโต้ตอบจะไม่มี มันประมวลผล/etc/bash.bashrc(หากไฟล์นั้นหรือไฟล์ที่คล้ายกันถูกเปิดใช้งานใน Bash เวอร์ชันของคุณ) และ~/.bashrc.

คุณสามารถเพิ่มสิ่งต่อไปนี้ลงในของคุณ~/.bashrc(แต่ระวังลูปหรือค่าที่เปลี่ยนแปลงโดยไม่ได้ตั้งใจ):

. $HOME/.profile
16 RichHomolka Aug 16 2010 at 17:28

มันขึ้นอยู่กับว่าคุณเริ่มต้นเปลือกของคุณอย่างไร อย่างที่คนอื่นบอกเชลล์ล็อกอินจะโหลดโปรไฟล์ของคุณ (มันจะมองหา. bash_profile ก่อนจากนั้นจะลอง. profile) หากพบสิ่งใดสิ่งหนึ่งก็จะโหลดขึ้นมา เชลล์ที่ไม่ใช่ล็อกอิน (ไม่ว่าจะเป็นแบบโต้ตอบหรือไม่โต้ตอบ) จะเป็นแหล่งที่มาของ. bashrc

ฉันขอแนะนำให้ใส่ทุกอย่างลงใน. bashrc การแยก. profile / .bashrc นั้นเป็นไปตามอำเภอใจและมีความหมายมากกว่าในสมัยก่อนของ UNIX เมื่อ tty ไม่ใช่แค่ชื่ออุปกรณ์และหมายถึง TeleType ที่แท้จริง มันหมายถึงการเริ่มต้นบางสิ่ง (เช่นการเช็คเมล) ในการเข้าสู่ระบบ 'หลัก' ไปยังเซิร์ฟเวอร์และเป็นเพียงการตั้งค่าปกติสำหรับเชลล์อื่น ๆ ใน Linuxes ส่วนใหญ่คุณจะเข้าสู่ระบบในตอนนี้คุณจะไม่ได้ลงชื่อเข้าใช้เชลล์จริงๆเนื่องจากคุณกำลังเข้าสู่อินเทอร์เฟซแบบกราฟิก (KDE, gnome, CDE 'shudder') ขณะนี้ "กระบวนการเข้าสู่ระบบวางไข่" ได้รับการดูแลโดยผู้จัดการเซสชันของคุณแล้ว ตอนนี้มีความเกี่ยวข้องน้อยกว่ามาก

ข้อเสนอแนะของฉัน: ทำให้. profile ของคุณประกอบด้วย:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

เป็นบรรทัดแรกของ. bashrc ป้องกันสิ่งแปลก ๆ ที่เกิดขึ้นเมื่อเรียกใช้สคริปต์ทุบตีโดยการกระโดดออกไปก่อนเวลา:

[[ $- != *i* ]] && return