Percebi que quando executo um comando diretamente em um host SSH usando a ssh <host> <command>sintaxe, vejo a saída de, .bashrcmas 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 .bashrcpor 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_profiletemporariamente 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_profilee .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?
.bashrcestavam lançando um erro, enquanto linhas semelhantes .bash_profilenã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.bashrcpode quebrar todas as ferramentas usando ssh como transporte.