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 $host
y ejecuto el comando "manualmente", la salida se almacena en línea, como se esperaba)
-tt
- eso funcionó para mí cuando no.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).
fuente
Para ampliar aún más la respuesta de Ryan Fox,
ssh -t
tampoco funcionó para mí, pero lossh -tt
hizo. Consulte la página de manual de ssh sobre -t:fuente