ฉันสังเกตว่าเมื่อฉันเรียกใช้คำสั่งโดยตรงบนโฮสต์ SSH โดยใช้ssh <host> <command>
ไวยากรณ์ฉันเห็นผลลัพธ์ของ.bashrc
แต่ไม่ใช่ผลลัพธ์ของ.bash_profile
(หรือ.profile
)
ตัวอย่างเช่นถ้าฉันวางคำสั่งต่อไปนี้ที่ด้านบนของไฟล์ทั้งสอง
echo ${BASH_SOURCE[0]}
และแหล่งที่มาด้วยตนเอง.bash_profile
(ที่มา.bashrc
ในการเปิด) ฉันจะเห็น
$ . .bash_profile
.bash_profile
.bashrc
นี่เป็นผลลัพธ์เดียวกันกับที่ฉันเห็นว่าฉันลงชื่อเข้าใช้คอมพิวเตอร์เครื่องนี้จากระยะไกลผ่าน SSH โดยใช้ssh <host>
รูปแบบของคำสั่ง (และถ้าฉันเก็บไว้ที่.bash_profile
อื่นชั่วคราวบรรทัดเหล่านี้จะไม่ถูกสะท้อนเลย)
อย่างไรก็ตามถ้าฉันรันคำสั่งบนเครื่องรีโมตโดยตรงด้วยssh <host> <command>
รูปแบบของssh
เอาต์พุตจะมีลักษณะดังนี้:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
ความเข้าใจของฉันอยู่ที่ความแตกต่างระหว่าง.bash_profile
และ.bashrc
เป็นว่าอดีตเป็นเปลือกหอยเข้าสู่ระบบในขณะที่หลังสำหรับการโต้ตอบและเปลือกหอยที่ไม่เข้าสู่ระบบ
ฉันได้ข้อสรุปดังต่อไปนี้:
ssh <host>
แหล่งที่มาเท่านั้น.bash_profile
ในขณะที่ssh <host> <command>
แหล่งข้อมูลเท่านั้น.bashrc
ซึ่งหมายถึง- อดีตเป็นเปลือกเข้าสู่ระบบและหลังไม่ได้
ข้อสรุปเหล่านี้ถูกต้องหรือไม่ เหตุใดจึงssh <host> <command>
ถือว่าเป็นเชลล์แบบโต้ตอบและไม่ใช่การเข้าสู่ระบบ SSH ยังไม่ได้เข้าสู่เครื่องระยะไกลเพื่อดำเนินการคำสั่งหรือไม่
.bashrc
กำลังโยนข้อผิดพลาดในขณะที่บรรทัดที่คล้ายกัน.bash_profile
ไม่ใช่ ฉันใช้โอกาสตรวจสอบความคลาดเคลื่อนก่อนแก้ไขบรรทัดที่ละเมิด
.bashrc
? ไฟล์นั้นไม่ควรสร้างเอาต์พุตใด ๆ เอาต์พุตใด ๆ จาก.bashrc
สามารถทำลายเครื่องมือทั้งหมดโดยใช้ ssh เป็นการขนส่งของพวกเขา