bashrc หรือ bash_profile


49

ฉันรู้ถึงความแตกต่างระหว่างสคริปต์ล็อกอิน bash สองตัว:

.bashrc ทำงานโดยเชลล์ "ที่ไม่ใช่การเข้าสู่ระบบ" เท่านั้น

.bash_profile(หรือ.bash_loginหรือ.profile) ถูกดำเนินการโดยเชลล์ "เข้าสู่ระบบ"

ใครบ้างมีตัวอย่างที่ดีของสิ่งที่เหมาะสำหรับการดำเนินการเข้าสู่ระบบเท่านั้นเช่นที่ฉันใส่ไว้.bash_profileแต่พวกเขาจะไม่เข้าท่า.bashrc?

(ฉันรู้ว่าส่วนใหญ่ของเรามา.bashrcจากแหล่งที่มา.bash_profileดังนั้นจึงดูเหมือนจะไม่มีประเด็นมากในคำถามตรงข้าม ... )


คำตอบ:


24

เนื่องจาก a .bashrcสำหรับเชลล์ที่ไม่ใช่การเข้าสู่ระบบฉันจึงหลีกเลี่ยงคำสั่งใด ๆ ที่สะท้อนไปยังหน้าจอ ฉันยังพบประสบการณ์ที่คำสั่ง echo ใน.bashrcจะทำให้คำสั่ง sftp และ rsync ล้มเหลว (และอาจคำสั่ง scp เช่นกัน)

# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime

นอกจากนี้โดยทั่วไปคุณจะไม่เรียกใช้ ssh-agent จากเชลล์ที่ไม่มีการโต้ตอบ ดังนั้นฉันมีสิ่งนี้.bash_profileค่ะ

if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi

2
หากคุณใช้ ~ / .profile แทนสิ่งที่ ~ / .bash_profile จะยังคงใช้ได้แม้ว่าคุณจะเปลี่ยนเชลล์ .. ~ / .bash_profile สำหรับการทุบตีสิ่งที่เฉพาะเจาะจง
LassePoulsen

1
แต่ bash จะรันเฉพาะ EITHER .bash_profile หรือ. profile ดังนั้นหากคุณจะใช้ทั้งสองอย่างคุณต้องระบุแหล่งที่มา. profile จากภายใน. bash_profile หรืออะไรบางอย่าง ที่ไม่ได้เป็นความคิดที่ดีจริง ...
ดอน Faulkner

@Source & @Don: คะแนนดี ฉันเคยมี Bashisms ใน. bash_profile ของฉัน แต่ตอนนี้ฉันเปลี่ยนไปใช้สิ่งที่เป็นสากลมากขึ้น อาจจะใช้. profile เป็นระเบียบ
Stefan Lasiewski

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

8

Byobu .bashrcเป็นตัวอย่างที่ดีของสิ่งที่คุณจะไม่เคยใส่ใน

มิฉะนั้นจะเรียกใช้ตัวเองซ้ำ ๆ ใน 'เทอร์มินัลเสมือนจริง' ;-)

คุณสามารถลองแม้ว่ามันสนุก

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


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