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
$HOMElocalmente. Caso você precise decommandspara 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 $servergera 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 executarcdem outro diretório, você obterá o que obtém mesmo secommandsnã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.