scp выводит свой индикатор выполнения на терминал, используя управляющие коды. Он обнаружит, перенаправляете ли вы вывод и тем самым пропустите индикатор выполнения.
Вы можете обойти это, обманывая scp, думая, что он запускается в терминале с помощью команды «script», которая по умолчанию установлена в большинстве дистрибутивов:
script -q -c "scp server:/file /tmp/" > /tmp/test.txt
Содержимое test.txt будет:
file 0% 0 0.0KB/s --:-- ETA
file 18% 11MB 11.2MB/s 00:04 ETA
file 36% 22MB 11.2MB/s 00:03 ETA
file 54% 34MB 11.2MB/s 00:02 ETA
file 73% 45MB 11.2MB/s 00:01 ETA
file 91% 56MB 11.2MB/s 00:00 ETA
file 100% 61MB 10.2MB/s 00:06
... что, вероятно, то, что вы хотите.
Я наткнулся на эту проблему, перенаправляя вывод интерактивного скрипта в файл журнала. Отсутствие результатов в журнале не было проблемой, так как вы всегда можете оценить коды выхода. Но я действительно хотел, чтобы интерактивный пользователь увидел индикатор выполнения. Этот ответ решает обе проблемы.