
Eu queria executar um comando em um shell remoto em seu ambiente interativo, para que ele carregasse meu controle remoto .bash_profile
antes de executar o comando.
Isso funciona muito bem:
echo "command" | ssh user@remote_host
[1]
Mas dá um erro
O pseudoterminal não será alocado porque stdin não é um terminal.
Não sei se isso é um problema porque o comando acima funciona muito bem para o meu propósito, mas ainda assim procurei uma solução para fazê-lo desaparecer e encontrei
ssh -t -t
[2]
Combinando-os você obtém echo "command" | ssh -tt user@remote_host
o que funciona muito bem.
Mas por algum motivo estranho no Git bash, depois de retornar da execução do comando, não consigo mais digitar. Eu testei no Cygwin, onde funciona muito bem, então é apenas o Git bash que tem esse problema.
Tentei digitar exit
caso ainda estivesse preso de forma invisível naquele shell remoto, mas nada funcionou.
Alguma idéia de qual pode ser o problema de fazer ssh -tt
no Git bash?
Responder1
A mensagem "Pseudo-terminal não será alocado" é apenas informativa. Se o comando que você está executando não precisa de um terminal, é melhor executar o ssh com a -T
opção de desabilitar a alocação de PTY e encerrar a mensagem.
Parece que seu TTY local está em um estado estranho por algum motivo. A execução stty sane
deve redefinir o terminal para um estado utilizável. Eu sei que você disse que não consegue digitar, mas você pode tentar fazer isso:
- Digite Control-Q (ou seja, mantenha pressionada a tecla "Control" e pressione "Q") para cancelar qualquer suspensão Ctrl-S/Ctrl-Q que possa estar em vigor
- Digite Control-J. Este é um caractere literal de nova linha para garantir que o shell esteja pronto para ler uma nova linha de comando.
- digite "stty sane" e depois Control-J novamente. Experimente mesmo que o que você digita não apareça na tela.
Se isso não funcionar, a opção nuclear seria executar "stty sane" no TTY travado de outro terminal.
- Abra outra janela do terminal.
- Use "ps" para descobrir em qual PTY está a sessão travada.
- Execute
stty sane
com a entrada redirecionada do PTY.
Por exemplo, no Linux:
$ ps -fu jdoe
...
jdoe 2083 2080 0 22:17 pts/0 00:00:00 /bin/bash <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0