Я помітив, що коли я запускаю команду безпосередньо на хості 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 як їх транспорт.