Há pouco que você pode fazer se não puder alterar o comando. O arquivo ~/.bashrc
deve ser processado durante a execução desse comando.
O que pode estar acontecendo é que você tem um instrução de saída condicional em .bashrc, geralmente bem perto do começo, que irá sair se o shell atual for detectado como não interativo (neste caso, é). Às vezes, o script verifica se a variável de prompt principal PS1 está definida; que é um método comum mas feio para avaliar um shell interativo versus um não interativo. Neste caso, quando PS1 não está definido, o resto de .bashrc não é analisado.
Eu verificaria se esse é o caso - use algumas técnicas simples de depuração para ver se o .bashrc é originado e se termina antes (por exemplo, instruções echo). Você precisaria modificar o .bashrc na máquina remota para resolver isso, e isso pode quebrar outras coisas, como scp e sftp. Ou você pode simplesmente definir PS1 no seu comando remoto.
Existe um certo número de soluções alternativas se você puder modificar o comando remoto:
- Adicione os itens necessários para executar o script em um arquivo bash separado. Fonte diretamente em seu comando.
- Use os caminhos completos no comando e no script remoto. Eu não sei quais outras dependências de env além do PATH você tem, mas obviamente elas precisam ser tratadas também.
- Na máquina remota, preencha
~/.ssh/environment
com todas as variáveis ambientais, aliases, funções etc. Modifique o arquivo de configuração ssh /etc/ssh/shhd
para certificar-se de que a configuração PermitUserEnvironment
esteja ativada; caso contrário, isso não funcionará.
- Adicione as configurações da variável ambiental ao comando, por exemplo,
"export
PATH=\$PATH:/home/you/bin;..."
Escaping PATH
garante que é o controle remoto
versão que estamos adicionando, impedindo a expansão antes de enviar o
comando.
Se nada disso funcionar, descreva suas restrições em mais detalhes.