SSH em um shell remoto, execute um comando 'source' e permaneça no shell remoto

2

Eu tenho um script chamado s em um servidor remoto que ativa um ambiente virtual como este:

source venv/bin/activate

Quando SSH-ed no servidor, eu sou capaz de ativar o ambiente por

. s

E eu SSH no servidor da seguinte forma:

ssh -t user@host "cd /path/to/dir ; /bin/bash"

Além de alterar o diretório de trabalho para /path/to/dir , seria bom se eu pudesse ativar o ambiente imediatamente toda vez que eu fizer login no servidor. Mas não importa onde eu coloque . s no comando SSH, usando -c para /bin/bash ou não, a sessão sempre termina imediatamente.

    
por Desmond Hume 13.08.2015 / 14:00

1 resposta

4

Use um novo arquivo de origem, por exemplo /home/user/.rcforssh

 #rc for ssh
 . /home/user/.bashrc
 . /home/user/venv/bin/activate  #or whichever location

e faça o login com

ssh -t user@host "cd /path/to/dir ; /bin/bash --rcfile /home/user/.rcforssh"

Nota lateral: source não é POSIX, enquanto . é.

ATUALIZAÇÃO após discussão especificando as necessidades do OP:

Para criar e remover o arquivo de origem modificado rcforssh on the fly, on pode usar:

ssh -t user@host "cd /path/to/dir ; echo '. ~/.bashrc ; . s ; rm rcforssh' > rcforssh ; /bin/bash --rcfile rcforssh"

i.e. criando o arquivo de origem com um comando echo e adicionando a remoção no arquivo mencionado.

    
por 13.08.2015 / 14:22