Я заметил, что когда я запускаю команду непосредственно на хосте 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>
source только.bash_profile
, в то время какssh <host> <command>
только исходники.bashrc
, что означает- первая - это оболочка для входа, а вторая - нет.
Верны ли эти выводы? Почему ssh <host> <command>
рассматривается как интерактивная оболочка, не входящая в систему? Разве SSH все еще не подключается к удаленной машине, чтобы выполнить команду?