Any ideas why this happens?
Talvez seu commands
inclua cd
. Você está executando commands; bash
, então bash
inicia em qualquer diretório commands
end.
A solução óbvia é cd
antes de você invocar bash
. Experimente
ssh -t $server 'commands; cd "$HOME"; exec bash -l'
Notas:
- As aspas simples impedem a expansão de
$HOME
localmente. Caso você precise decommands
para incluir variáveis expandidas localmente, misture as aspas (por exemplo,"commands with $var; "'cd "$HOME"; exec bash -l'
). -
exec
, porque você não precisa mais do shell pai no lado remoto (ou não?). -
-l
(equivalente a--login
) porque o únicossh $server
gera um shell de login e você quer que o comando inteiro aja da mesma forma. Bash como um shell de login origina arquivos diferentes do shell de não-login, começando com/etc/profile
; as regras são um pouco complicadas, vejaman 1 bash
, procure porINVOCATION
. Se um desses arquivos executarcd
em outro diretório, você obterá o que obtém mesmo secommands
não alterar o diretório. Você não disse quais são os diretórios ("certo" e "errado"), então é difícil até mesmo adivinhar qual o objetivo desse "oculto"cd
.
Ou você pode executar commands
em um subshell. Isso não afetará o diretório de trabalho do shell pai, então bash
será iniciado sempre que o shell pai for iniciado:
ssh -t $server '(commands); exec bash -l'
Você pode preferir uma solução ou outra dependendo de qual commands
. Por exemplo, se commands
modificar o ambiente de seu shell no lado remoto, executá-los em um subshell ou não fará diferença para o% finalbash
.