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


22

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

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


แสดงให้เราเห็นคำสั่งที่คุณใช้เพื่อเริ่มเปลือกของคุณ
Nifle

คำตอบ:


24

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

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

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

. $HOME/.profile

8
หากคุณกำลังจะมีแหล่ง. bashrc ของคุณ. profile (ซึ่งฉันไม่แนะนำ) คุณควรมีการป้องกันการจัดหาคู่ ตั้งค่าตัวแปรการป้องกันบางอย่าง [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka


12
เชลล์ล็อกอินจะลอง ~ / .bash_profile, ~ / .bash_login และ ~ / .profile ตามลำดับและเปิดเฉพาะเชลล์แรกที่พบ
Beano

3
ดังที่คนอื่น ๆ พูดกันสิ่งนี้ไม่แนะนำเนื่องจากวิธีปกติสำหรับโปรไฟล์และ "เพื่อน" (.bash_profile) ไปยังแหล่ง. bashrc และไม่ใช่วิธีอื่น อาจเป็นได้ว่าโปรแกรมเทอร์มินัลของคุณไม่ใช่เชลล์การเข้าสู่ระบบ แต่เป็นเชลล์ที่ไม่ใช่การล็อกอินแบบโต้ตอบ บ่อยครั้งที่มีการตั้งค่าที่คุณสามารถตั้งค่า - ทำให้มันเป็นเปลือกเข้าสู่ระบบเพื่อรับ. profile, .login และ / หรือ. bash_profile เพื่อดำเนินการ
rholmes

15

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

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

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

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

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

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

5
.profileควรเก็บไว้ไม่เชื่อเรื่องพระเจ้าทุบตี ฉันขอแนะนำให้กำหนดค่า.bash_profileโหลดแล้วโหลด.profile .bashrcใส่เฉพาะผู้ไม่เชื่อเรื่องพระเจ้าทุบตีใน.profileเช่นPATHและLC_*สิ่งที่ ใส่ส่วนที่เหลือ.bashrcค่ะ
lesmana

@ Rich Homolka ทำไม [-f $ HOME / .bashrc] สองครั้งในคำสั่งของคุณคืออะไร คำสั่งที่คุณโพสต์แตกต่างจาก just 'เป็นอย่างไร $ HOME / .bashrc '
David Doria

1
Protip: อย่าใส่อะไรลงใน. bashrc ของคุณที่เขียนไปยัง stdout หรือ stderr เนื่องจากอาจทำให้ลูกค้าที่ไม่ได้มีปฏิสัมพันธ์โต้ตอบกับสิ่งต่าง ๆ เช่น SCP สิ่งที่มีผลลัพธ์ (ตัวอย่างเช่นฉันชอบที่จะได้รับการต้อนรับด้วยคุกกี้โชคลาภและเวลาทำงาน) ควรเข้าสู่. profile / .bash_profile เท่านั้น
Brian A. Henning

@ Laryaryx จริง เรามี kshrc มาตรฐาน ish ที่ส่งออกไปยัง stdout โพล่งออกมา Xserver (นกฮัมมิงเบิร์ดเกิน)
Rich Homolka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.