Saída SSH não é buffer de linha?


35

Estou executando um script em uma máquina remota como esta:

ssh $host "pip install -r /path/to/requirements.txt"

Mas a saída não é buffer de linha; em vez de ver uma linha retornada por vez, todas as linhas (~ 10) são impressas de uma só vez quando a conexão termina.

O que há com isso? Existe alguma maneira de forçá-los a ser buffer de linha?

(também, para afirmar o óbvio: quando ssh $hoste executo o comando "manualmente", a saída é armazenada em buffer, como esperado)

Respostas:


45

Use ssh -t ...para forçar uma alocação pseudo-tty (que é o que você obtém quando efetua login normalmente via ssh.)


infelizmente não ajudou. Isso também pode ser um problema com o MTU, mas nada disso ajudou
314 Nick Roz

Veja o comentário de Magnus abaixo ref using -tt- que funcionou para mim quando -t não funcionou.
Tom Dalton

23

Para expandir um pouco a resposta de Ryan Fox: Muitos programas (a maioria? - é o padrão para qualquer programa C) stdout de buffer de linha quando estão conversando com um terminal, mas, caso contrário, serão totalmente armazenados em buffer. (O padrão C especifica que o stdout é inicialmente totalmente armazenado em buffer quando "pode ​​ser determinado que não se refere a um dispositivo interativo".)

Então, o que você está vendo é que a saída do programa que você está executando remotamente (conforme fornecido ao stdout) não tem buffer de linha; O ssh está apenas passando pelo que recebe quando recebe. (Eu acho que o ssh realmente não faz buffer em sua saída - essa seria a maneira menos mágica de garantir que o usuário veja o que o programa remoto pretendia.)


Um usuário anônimo sugere que stdout está totalmente tamponada, não linha tamponada
Michael Mrozek

Dave Vandervies me disse fora da banda que ele foi quem fez a edição e que está correto (ou seja, stdout é inicialmente totalmente bufferizado, não de linha).
David Wolever

6

Expandir ainda mais a resposta de Ryan Fox ssh -ttambém não funcionou para mim, mas ssh -ttfuncionou. Veja a página de manual do ssh sobre -t:

Várias opções -t forçam a alocação de tty, mesmo se ssh não tiver tty local

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.