Saya perhatikan bahwa ketika saya menjalankan perintah langsung pada host SSH menggunakan ssh <host> <command>sintaks, saya melihat output .bashrctetapi bukan output .bash_profile(atau .profile).
Misalnya, jika saya menempatkan perintah berikut di bagian atas kedua file,
echo ${BASH_SOURCE[0]}
dan sumber secara manual .bash_profile(sumber mana .bashrcpada gilirannya), saya akan melihat
$ . .bash_profile
.bash_profile
.bashrc
Ini adalah output yang sama yang saya lihat jika saya masuk ke komputer ini dari jarak jauh melalui SSH, menggunakan ssh <host>bentuk perintah. (Dan jika saya menyimpan di .bash_profiletempat lain untuk sementara waktu, tak satu pun dari baris ini akan bergema.)
Namun, jika saya menjalankan perintah langsung pada mesin jarak jauh dengan ssh <host> <command>bentuk ssh, maka hasilnya akan terlihat seperti ini:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Pemahaman saya adalah bahwa perbedaan antara .bash_profiledan .bashrcyang pertama adalah untuk shell login sedangkan yang terakhir adalah untuk shell non-login yang interaktif .
Saya telah menyimpulkan yang berikut ini:
ssh <host>sumber saja.bash_profile, sementarassh <host> <command>sumber saja.bashrc, yang artinya- yang pertama adalah shell login dan yang terakhir tidak.
Apakah kesimpulan ini benar? Mengapa ssh <host> <command>diperlakukan sebagai shell non-login yang interaktif? Bukankah SSH masih masuk ke mesin jarak jauh untuk menjalankan perintah?
.bashrcmelemparkan kesalahan, sedangkan baris serupa .bash_profiletidak. Saya mengambil kesempatan untuk menyelidiki perbedaan sebelum memperbaiki garis yang menyinggung.
.bashrc? File itu tidak seharusnya menghasilkan output apa pun. Output apa pun dari.bashrcdapat merusak semua alat menggunakan ssh sebagai transportasi mereka.