Saya perhatikan bahwa ketika saya menjalankan perintah langsung pada host SSH menggunakan ssh <host> <command>
sintaks, saya melihat output .bashrc
tetapi 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 .bashrc
pada 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_profile
tempat 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_profile
dan .bashrc
yang 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?
.bashrc
melemparkan kesalahan, sedangkan baris serupa .bash_profile
tidak. Saya mengambil kesempatan untuk menyelidiki perbedaan sebelum memperbaiki garis yang menyinggung.
.bashrc
? File itu tidak seharusnya menghasilkan output apa pun. Output apa pun dari.bashrc
dapat merusak semua alat menggunakan ssh sebagai transportasi mereka.