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