Я запускаю скрипт на удаленной машине, как это:
ssh $host "pip install -r /path/to/requirements.txt"
Но вывод не буферизован строкой; вместо того, чтобы видеть по одной строке, возвращаемой за раз, все строки (~ 10) печатаются сразу, когда соединение разрывается.
Что с этим? Есть ли способ заставить их быть буферизованными?
(также, чтобы заявить очевидное: когда я $host
запускаю и запускаю команду «вручную», вывод буферизуется, как и ожидалось)
-tt
- это сработало для меня, когда -t нет.Чтобы немного расширить ответ Райана Фокса: Многие программы (большинство? - по умолчанию для любой программы на C) выводят строковый буфер, когда они общаются с терминалом, но в противном случае полностью буферизуют его. (Стандарт C определяет, что стандартный вывод изначально полностью буферизируется, когда он «может быть определен как не относящийся к интерактивному устройству».)
Итак, вы видите, что выходные данные программы, которую вы запускаете удаленно (как указано в stdout), не являются буферизованными строками; ssh просто проходит через то, что получает, когда получает. (Я думаю, что ssh на самом деле вообще не буферизирует свои выходные данные - это был бы наименее волшебный способ убедиться, что пользователь видит то, что предназначала удаленная программа.)
источник
Более подробно об ответе Райана Фокса
ssh -t
у меня тоже не получилось, но сработалоssh -tt
. Смотрите страницу руководства ssh о -t:источник