Używam skryptu na zdalnym komputerze, takim jak ten:
ssh $host "pip install -r /path/to/requirements.txt"
Ale wynik nie jest buforowany wierszowo; zamiast widzieć, że jedna linia jest zwracana na raz, wszystkie linie (~ 10) są drukowane jednocześnie po zakończeniu połączenia.
O co chodzi? Czy istnieje sposób, aby zmusić je do buforowania linii?
(również, aby powiedzieć oczywiste: kiedy ssh $host
i uruchomię polecenie „ręcznie”, dane wyjściowe są buforowane zgodnie z oczekiwaniami)
-tt
- to zadziałało dla mnie, gdy -t nie.Aby nieco rozwinąć odpowiedź Ryana Foxa: Wiele programów (większość? - jest to domyślna dla każdego programu w języku C) stdout bufora linii, gdy rozmawiają z terminalem, ale w przeciwnym razie całkowicie je buforują. (Norma C określa, że stdout jest początkowo w pełni buforowany, gdy „można stwierdzić, że nie odnosi się do urządzenia interaktywnego”).
Widzisz więc, że dane wyjściowe programu, który uruchamiasz zdalnie (jak podano dla stdout), nie są buforowane w linii; ssh po prostu przechodzi przez to, co dostaje, kiedy to dostaje. (Myślę, że ssh w ogóle nie buforuje danych wyjściowych - byłby to najmniej magiczny sposób upewnienia się, że użytkownik zobaczy, co zamierzał zdalny program).
źródło
Aby jeszcze bardziej rozwinąć odpowiedź Ryana Foxa,
ssh -t
też nie działało to dla mnie, ale zadziałałossh -tt
. Zobacz stronę man ssh o -t:źródło