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