ในอดีตไฟล์โปรไฟล์ ( /etc/profile
และ~/.profile
) ถูกเรียกใช้เมื่อคุณเข้าสู่ระบบ (บนคอนโซลข้อความมีอะไรอีกบ้าง) และรับใช้จุดประสงค์มากมาย:
- ตั้งค่าตัวแปรสภาพแวดล้อมและพารามิเตอร์อื่น ๆ (เช่น umask) สำหรับเซสชัน
- เรียกใช้โปรแกรมพิเศษเมื่อเริ่มต้นเซสชัน (เช่นการแจ้งเตือนทางอีเมล)
- เรียกใช้โปรแกรมสำหรับเซสชันหากแตกต่างจากเชลล์ (เช่นเชลล์อื่นหรือ X Window)
- ตั้งค่าพารามิเตอร์เทอร์มินัล (เช่น
stty
)
- ตั้งค่าพารามิเตอร์ของเชลล์ (เช่นนามแฝง)
วัตถุประสงค์ทั้งหมดเหล่านี้ไม่ได้ระบุว่าแยกกันจนกระทั่งภายหลัง เนื่องจากสคริปต์โปรไฟล์อาจทำสิ่งต่าง ๆ ที่เหมาะสมในเซสชันแบบโต้ตอบเท่านั้น (การโต้ตอบเทอร์มินัลเริ่มโปรแกรมอื่น ๆ ) เมื่อเปิดใช้การเรียกใช้เชลล์ระยะไกล ( rsh ) การใช้ rsh จึงตัดสินใจที่จะไม่เรียกใช้เชลล์ระยะไกลเป็นเชลล์ล็อกอิน เพื่อไม่ให้สคริปต์โปรไฟล์ทำงาน (บางรุ่นrshd
มีตัวเลือกในการเรียกใช้เปลือกระยะไกลเป็นเปลือกเข้าสู่ระบบ) Ssh คัดลอกพฤติกรรมนี้เพื่อที่จะแทนที่แบบหล่นในสำหรับ rsh
หากคุณต้องการให้สคริปต์โปรไฟล์ทำงานคุณสามารถเรียกใช้งานสคริปต์เหล่านั้นอย่างชัดเจน
ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'
หมายเหตุคำสั่ง.
เพื่อโหลดสคริปต์โปรไฟล์ภายในเชลล์: เป็นคำสั่งที่ต้องดำเนินการภายในเชลล์นั้นไม่ใช่โปรแกรมภายนอก
หากคุณต้องการตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลกสำหรับผู้ใช้ทุกคนมีวิธีอื่นในระบบหลายแทนการกำหนดไว้ในกำหนดไว้ใน/etc/profile
/etc/environment
ไฟล์นี้อ่านผ่านpam_env
โมดูล ลีนุกซ์ส่วนใหญ่ถูกตั้งค่าให้อ่าน
หากเชลล์ล็อกอินของคุณทุบตีจะมีความเป็นไปได้อีก โดยปกติคุณไม่ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็น.bashrc
(เพราะจะไม่ถูกตั้งค่าในเซสชัน X ยกเว้นว่าคุณผ่านเทอร์มินัลที่มีเชลล์แบบโต้ตอบเพราะมันจะไม่ถูกตั้งค่าหากคุณเข้าสู่ระบบแบบโต้ตอบบนคอนโซลข้อความหรือบน ssh, เพราะมันจะแทนที่การตั้งค่าแบบกำหนดเองหากคุณเรียกใช้เชลล์ภายในโปรแกรมอื่น) อย่างไรก็ตามทุบตีมีคุณสมบัติแปลกที่ฉันไม่เคยเข้าใจ: มันอ่าน~/.bashrc
ในสองสถานการณ์ที่ไม่เกี่ยวข้อง:
- ในเชลล์เชิงโต้ตอบที่ไม่ใช่ล็อกอินเชลล์
- ในเปลือกหอยที่ไม่ใช่แบบโต้ตอบที่ไม่ได้เข้าสู่ระบบหอยถ้าทุบตีคิดว่ามันได้รับการเรียกโดยหรือ
rshd
sshd
เมื่อคุณเรียกใช้คำสั่งผ่าน ssh คุณจะอยู่ในกรณีที่สอง คุณสามารถจัดให้มีรายละเอียดของคุณอ่านด้วยการอ่าน/etc/profile
และจาก.profile
.bashrc
รวมรหัสต่อไปนี้ในของคุณ~/.bashrc
:
case $- in
*i*) :;; # this is an interactive shell, fine
*) # This is not an interactive shell! This must be a non-interactive remote shell session.
. /etc/profile; . ~/.profile
return;;
esac
ydisplay
ไหน ไม่ssh 127.0.0.1 /usr/app/cpn/bin/ydisplay
ทำงานหรือไม่