¿La salida SSH no tiene línea de búfer?

35

Estoy ejecutando un script en una máquina remota como esta:

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

Pero la salida no está en línea; en lugar de ver una línea devuelta a la vez, todas las líneas (~ 10) se imprimen todas a la vez cuando finaliza la conexión.

¿Qué pasa con esto? ¿Hay alguna forma de obligarlos a que estén en línea?

(también, para decir lo obvio: cuando ingreso $hosty ejecuto el comando "manualmente", la salida se almacena en línea, como se esperaba)

David Wolever
fuente

Respuestas:

45

Use ssh -t ...para forzar una asignación de pseudo-tty (que es lo que obtiene cuando inicia sesión normalmente a través de ssh).

Ryan Fox
fuente
no ayudó, desafortunadamente. Esto también podría ser un problema con MTU, pero ninguno de los dos ayudó
Nick Roz el
Vea el comentario de Magnus debajo de ref usando -tt- eso funcionó para mí cuando no.
Tom Dalton
23

Para ampliar un poco la respuesta de Ryan Fox: Muchos programas (¿la mayoría? - ¿Es el valor predeterminado para cualquier programa C)? (El estándar C especifica que stdout está inicialmente totalmente protegido cuando "se puede determinar que no se refiere a un dispositivo interactivo").

Entonces, lo que está viendo es que la salida del programa que está ejecutando de forma remota (como se le da a stdout) no está almacenada en línea; ssh solo está pasando por lo que obtiene cuando lo recibe. (Creo que ssh en realidad no almacena ningún búfer en su salida; esa sería la forma menos mágica de asegurarse de que el usuario vea lo que pretendía el programa remoto).

Dave Vandervies
fuente
Un usuario anónimo sugiere que stdout está completamente almacenado, no está almacenado en línea
Michael Mrozek
Dave Vandervies me dijo fuera de banda que él fue quien hizo la edición, y que es correcto (es decir, stdout inicialmente está completamente protegido, no en línea).
David Wolever
6

Para ampliar aún más la respuesta de Ryan Fox, ssh -ttampoco funcionó para mí, pero lo ssh -tthizo. Consulte la página de manual de ssh sobre -t:

Varias opciones -t fuerzan la asignación de tty, incluso si ssh no tiene tty local

Magnus Berg
fuente