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 $host
e executo o comando "manualmente", a saída é armazenada em buffer, como esperado)
-tt
- que funcionou para mim quando -t não funcionou.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.)
fonte
Expandir ainda mais a resposta de Ryan Fox
ssh -t
também não funcionou para mim, masssh -tt
funcionou. Veja a página de manual do ssh sobre -t:fonte