L'output SSH non è bufferizzato in linea?


35

Sto eseguendo uno script su un computer remoto come questo:

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

Ma l'output non è bufferizzato in linea; invece di vedere una riga restituita alla volta, tutte le righe (~ 10) vengono stampate tutte in una volta al termine della connessione.

Che succede con questo? Esiste un modo per forzare il buffering della linea?

(inoltre, per affermare l'ovvio: quando eseguo SSH $hosted eseguo il comando "manualmente", l'output è bufferizzato, come previsto)

Risposte:


45

Utilizzare ssh -t ...per forzare un'allocazione pseudo-tty (che è ciò che si ottiene quando si accede normalmente tramite ssh.)


purtroppo non ha aiutato. Anche questo potrebbe essere un problema con MTU, ma nessuno dei due ha aiutato
Nick Roz,

Vedi il commento di Magnus sotto ref ref -tt- che ha funzionato per me quando no.
Tom Dalton,

23

Per espandere un po 'la risposta di Ryan Fox: molti programmi (la maggior parte? - è l'impostazione predefinita per qualsiasi programma C) stdout buffer di linea quando stanno parlando con un terminale, ma in caso contrario lo bufferizzano completamente. (Lo standard C specifica che stdout è inizialmente completamente bufferizzato quando "si può determinare di non fare riferimento a un dispositivo interattivo".)

Quindi quello che vedi è che l'output del programma che stai eseguendo in remoto (come dato a stdout) non è bufferizzato in linea; ssh sta semplicemente passando attraverso ciò che ottiene quando lo ottiene. (Penso che ssh non esegua affatto il buffering del suo output - sarebbe il modo meno magico per assicurarsi che l'utente veda ciò che il programma remoto intendeva.)


Un utente anonimo suggerisce che lo stdout è completamente bufferizzato, non con buffer di linea
Michael Mrozek

Dave Vandervies mi ha detto fuori banda che è stato lui a fare l'editing e che è corretto (cioè, stdout è inizialmente completamente bufferizzato, non bufferizzato).
David Wolever,

6

Espandere ancora di più la risposta di Ryan Fox, ssh -tnon ha funzionato neanche per me, ma ssh -ttha funzionato. Vedi la pagina man di ssh su -t:

Le opzioni multiple -t forza l'allocazione di tty, anche se ssh non ha tty locale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.