Percebi que quando executo um comando diretamente em um host SSH usando a ssh <host> <command>
sintaxe, vejo a saída de, .bashrc
mas não a saída de .bash_profile
(ou .profile
).
Por exemplo, se eu colocar o seguinte comando na parte superior dos dois arquivos,
echo ${BASH_SOURCE[0]}
e manualmente fonte .bash_profile
(que fontes .bashrc
por sua vez), vou ver
$ . .bash_profile
.bash_profile
.bashrc
Essa é a mesma saída que eu vejo se fizer login neste computador remotamente via SSH, usando o ssh <host>
formulário do comando. (E se eu guardar .bash_profile
temporariamente em outro lugar temporariamente, nenhuma dessas linhas será reproduzida.)
No entanto, se eu executar um comando diretamente na máquina remota com o ssh <host> <command>
formato de ssh
, a saída será assim:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Meu entendimento é que a diferença entre .bash_profile
e .bashrc
é que o primeiro é para shells de login, enquanto o último é para shells interativos e sem login .
Concluí o seguinte:
ssh <host>
apenas fontes.bash_profile
, enquantossh <host> <command>
apenas fontes.bashrc
, o que significa- o primeiro é um shell de login e o segundo não.
Essas conclusões estão corretas? Por que é ssh <host> <command>
tratado como um shell interativo e sem login? O SSH ainda não está efetuando login na máquina remota para executar o comando?
.bashrc
estavam lançando um erro, enquanto linhas semelhantes .bash_profile
não estavam. Aproveitei a oportunidade para investigar a discrepância antes de consertar as linhas ofensivas.
.bashrc
? Esse arquivo não deve produzir nenhuma saída. Qualquer saída de.bashrc
pode quebrar todas as ferramentas usando ssh como transporte.