Ich führe ein Skript auf einem entfernten Rechner wie folgt aus:
ssh $host "pip install -r /path/to/requirements.txt"
Die Ausgabe ist jedoch nicht zeilengepuffert. Anstatt immer nur eine Zeile zu sehen, werden alle Zeilen (~ 10) gleichzeitig gedruckt, wenn die Verbindung beendet wird.
Was ist damit los? Gibt es eine Möglichkeit, die Zeilenpufferung zu erzwingen?
(Um das Offensichtliche zu verdeutlichen: Wenn ich $host
den Befehl "manuell" eingebe und ausführe, wird die Ausgabe wie erwartet zeilengepuffert.)
-tt
- das hat bei mir funktioniert, als -t nicht.Um die Antwort von Ryan Fox ein wenig zu erläutern: Viele Programme (die meisten? - das ist die Standardeinstellung für jedes C-Programm) puffern stdout, wenn sie mit einem Terminal sprechen, aber puffern es andernfalls vollständig. (Der C-Standard gibt an, dass stdout anfangs vollständig gepuffert ist, wenn festgestellt werden kann, dass es sich nicht um ein interaktives Gerät handelt.)
Sie sehen also, dass die Ausgabe des Programms, das Sie remote ausführen (wie bei stdout angegeben), nicht zeilengepuffert ist. ssh durchläuft nur das, was es bekommt, wenn es es bekommt. (Ich denke, ssh puffert überhaupt nicht an seiner Ausgabe - das wäre die am wenigsten magische Art, um sicherzustellen, dass der Benutzer sieht, was das Remote-Programm beabsichtigt hat.)
quelle
Ryan Fox 'Antwort noch ausführlicher darzulegen,
ssh -t
hat auch bei mir nicht funktioniert, aber es hatssh -tt
funktioniert. Siehe die SSH-Manpage über -t:quelle