.bashrc at ssh login


374

เมื่อฉัน ssh ลงใน ubuntu-box ของฉันที่รัน Hardy 8.04 ตัวแปรสภาพแวดล้อมในตัวฉัน.bashrcจะไม่ถูกตั้งค่า

ถ้าฉันทำแหล่งข้อมูล.bashrcตัวแปรจะถูกตั้งค่าอย่างเหมาะสมและทุกอย่างดี

ทำไม.bashrcจึงไม่ทำงานเมื่อเข้าสู่ระบบ


92
"ปิดหัวข้อ" ในโลกนี้เป็นอย่างไร
โยนาห์

8
ฉันไม่เข้มงวดเช่นนี้ แต่ฉันเดาว่านี้อยู่ใน serverfault.com, superuser.com หรือ askubuntu.com
ไมเคิลบัตเลอร์

16
@MichaelButler เห็นด้วย สงสัยว่าทำไมพวกเขาถึงไม่ขยับมันแทนที่จะปิดมันลงไป
ซะ

4
@Luc - คำถามสามารถย้ายได้ภายใน 60 วันของการสร้าง คำถามนี้ไม่ได้ถูกปิดเป็นหัวข้อปิดจนกว่า 3 และครึ่งปีหลังจากที่ถูกสร้างขึ้น ฉันเชื่อว่ากฎ 60 วันนั้นเกี่ยวข้องกับเมื่อมีการสำรองฐานข้อมูลคำถามหรือบางสิ่งบางอย่าง ... มันยากที่จะโยกย้ายหลังจากการสำรองข้อมูลเกิดขึ้น
ArtOfWarfare

ฉันคิดว่ามันเป็นคำถามที่มีประโยชน์มาก พบปัญหานี้เมื่อฉันต้อง ssh เข้าสู่เครื่อง A เพื่อที่จะ ssh เข้าสู่เครื่อง B (เข้าถึงได้ผ่านเครือข่ายท้องถิ่นของ A เท่านั้น) สอนฉันถึงความแตกต่างระหว่างจริง.bashrcกับ.bash_profile!
information_interchange

คำตอบ:


620

.bashrcไม่ได้มีที่มาเมื่อคุณเข้าสู่ระบบโดยใช้ SSH คุณต้องแหล่งที่มาใน.bash_profileแบบนี้:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

32
สิ่งนี้ควรใช้กับ

1
สิ่งนี้ไม่จำเป็นสำหรับเซิร์ฟเวอร์ Ubuntu 12.04 LTS เนื่องจาก.bashrcมีการจัดหาเมื่อคุณใช้ SSH
orokusaki

4
@orokusaki: การแก้ไขคือ :) มีไฟล์. bash_profile อันธพาลซึ่งบังคับให้ข้าม. profile ไป
เลสเตอร์พีบอดี

4
เช่น @LesterPeabody, .bashrc ของฉันไม่ได้มีที่มาจากเซิร์ฟเวอร์ Ubuntu 12.04 LTS เนื่องจาก rogue .bash_profile มันถูกสร้างขึ้นโดยการติดตั้ง RVM ฉันย้ายคำสั่ง RVM ไปที่. profile และลบ. bash_profile ทั้งหมดทำงานได้ดีในขณะนี้
Rod Daunoravicius

4
FWIW เดเจสซี / 8 แหล่งที่มาแล้ว.bashrcออกจากกล่อง - แต่มันไม่ได้มาจากไม่.profile .bash_profile
underscore_d

75

ฉันมีสถานการณ์ที่คล้ายกันเช่น Hobhouse ฉันต้องการใช้คำสั่ง

 ssh myhost.com 'some_command'

และ 'some_command' มีอยู่ใน '/ var / some_location' ดังนั้นฉันจึงพยายามต่อท้าย '/ var / some_location' ในสภาพแวดล้อม PATH โดยแก้ไข '$ HOME / .bashrc'

แต่นั่นไม่ได้ทำงาน เนื่องจากค่าเริ่มต้น. bashrc (Ubuntu 10.4 LTS) ป้องกันไม่ให้มีการจัดหาตามรหัสด้านล่าง

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

ดังนั้นหากคุณต้องการเปลี่ยนสภาพแวดล้อมสำหรับ ssh non-login shell คุณควรเพิ่มโค้ดด้านบนบรรทัดนั้น


7
ขอบคุณเพื่อน! นี้เป็นบิตที่ไม่ได้ทำงานสำหรับฉัน :)
เรย์มอนด์บาร์โลว์

เคล็ดลับเด็ดน้ำค้าง ฉันพบกับดักนี้เมื่อใช้งานสคริปต์จากเจนกินส์ ฉันเข้าสู่ระบบผ่านทาง SSH และใช้งานได้ เจนกิ้นส์เข้าสู่ระบบแบบไม่โต้ตอบและมันล้มเหลว
Krzysztof Jabłoński

1
เหตุใดวิธีแก้ปัญหาทั่วไปคือไม่ได้กำหนดเส้นทางใหม่สำหรับกระสุนที่ไม่มีการโต้ตอบอยู่นอกเหนือฉัน ควรมีค่อนข้างสูงกว่านั้นถ้าคำสั่งด้วยเหตุผลนี้ ดูเหมือนว่าจะเป็นเพียงนามแฝงและการเริ่มต้นเครื่องมือเชิงโต้ตอบควรอยู่ใต้บรรทัดนั้น ...
BenPen

2
ใน Ubuntu รุ่นอื่น ๆ การตรวจสอบแบบอินเทอร์แอกทีฟดูเหมือน:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain

ขอบคุณสิ่งนี้แก้ไขให้ฉันแล้ว หวังว่าฉันจะเห็นสิ่งนี้ประมาณหนึ่งชั่วโมงที่ผ่านมา!
Justin Lawrence

31

สำหรับทรัพยากรที่ยอดเยี่ยมเกี่ยวกับวิธีการเรียกใช้ bash สิ่งที่ dotfiles ทำคืออะไรและคุณควรใช้ / กำหนดค่าอย่างไรให้อ่านสิ่งนี้:


ข้อความสำคัญ: "ทำให้อ่าน / etc / profile จากนั้นหนึ่งใน. bash_profile หรือ. bash_login หรือ .profile"
Andy Hayden

29

หากแก้ปัญหา Ayman ไม่ทำงานลองตั้งชื่อไฟล์ของคุณแทน.profile .bash_profileที่ทำงานให้ฉัน


2
น่ากลัว ฉันเสียเวลา 15 นาทีในรายละเอียดนี้
vmassuchetto

นี่เป็นกลอุบายใน Ubuntu 12.10
ThinkCode

1
ฉันคิดว่า. profile โหลดบนการเข้าสู่ระบบ GUI .bash_profile สำหรับการล็อกอินเทอร์มินัล
Razec Luar

สิ่งนี้ใช้ได้สำหรับการเข้าสู่ระบบ SSH ไปยังคอนเทนเนอร์นักเทียบท่า Debian Jessie (ใช้ข้อมูลคอนเทนเนอร์เท่านั้นสำหรับการจัดเก็บแบบถาวร) - แต่คุณอาจต้องการตรวจสอบ / etc / passwd เพื่อตรวจสอบเปลือกเข้าสู่ระบบของคุณคือ / bin / bash & not / bin / sh -------> / bin / dash
Stuart Cardall

1
@RazecLuar .profileจะถูกดำเนินการโดยล็อกอินเชลล์ใด ๆโดยไม่คำนึงว่าเชลล์ดังกล่าวตั้งใจที่จะวางไข่ GUI หรือไม่ ความคิดเห็นของคุณขัดแย้งกับคำถามและคำตอบนี้อย่างชัดเจนซึ่งบ่งชี้อย่างชัดเจนว่า.profileถูกเรียกใช้ใน SSHing ซึ่งเป็นวิธีการที่ไม่ใช่ GUI อย่างชัดเจน
underscore_d
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.