Quando você faz:
ssh serva -t "source ~/.bashrc"
ssh
diz a sshd
para invocar o shell de login do usuário remoto como:
the-shell -c 'source ~/.bashrc'
Isso diz ao shell para executar esse comando e sair.
Provavelmente, o que você deseja é executar um shell interativo e ter esse shell interativo para executar o comando source ~/.bashrc
e depois para emitir um prompt e ler mais comandos para executar de você.
Primeiro, observe que, no caso de source ~/.bashrc
, isso não é necessário, pois bash
já origina seu ~/.bashrc
quando interativo (na verdade, acima de ssh
, até quando não é interativo). Então:
ssh serva
É o suficiente.
Agora, se você quiser executar um comando e, em seguida, um shell interativo, faça o seguinte:
ssh -t serva 'cmd; bash'
(lá, o -t
é necessário porque ssh
não inicia um pseudo-terminal por padrão quando passou um comando para executar)
cmd
não seria executado por esse bash
(seria executado pelo shell (seu shell de login) iniciado por sshd para interpretar esse cmd; bash
linha de comando).
Se você queria que o bash
interativo executasse esse comando. Um truque é usar a variável bash
do PROMPT_COMMAND
. bash
interpreta o conteúdo dessa variável como código shell a ser executado antes de cada prompt. Então você pode fazer:
ssh -t serva 'PROMPT_COMMAND="cmd; unset PROMPT_COMMAND" bash'