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.