我试图从安装脚本(使用scp)捕获输出并记录它.但是,我没有得到scp正在打印的所有内容,即进度条.
屏幕输出:
将/ user2/cdb/builds/tmp/uat/myfiles/*复制到server/users/myfiles as cdb
cdb @ server的密码:myfile 100%|*****************************| 2503 00:00
日志输出:
将/ user2/cdb/builds/tmp/uat/myfiles/*复制到server/users/myfiles as cdb
我真的很想知道我的文件到了那里.这是我现在尝试的无济于事:
myscript.sh 2>&1 | tee mylogfile.log
有没有人有一个很好的方法来捕获scp输出并记录它?
谢谢.
scp使用控制代码将其进度条打印到终端.它将检测您是否重定向输出,从而省略进度条.
你可以通过欺骗scp认为它在终端中运行使用"脚本"命令来解决这个问题,该命令默认安装在大多数发行版上:
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
......这可能是你想要的.
我在将交互式脚本的输出重定向到日志文件时偶然发现了这个问题.在日志中没有结果不是问题,因为您始终可以评估退出代码.但我真的希望交互式用户看到进度条.这个答案解决了这两个问题.
看起来你只是想知道scp是否在日志中成功.
我猜测滚动条不会打印到stdout并使用ncurses或其他类型的TUI?
您可以查看scp的返回值以查看它是否成功.喜欢
scp myfile user@host.com:. && echo success!
man scp
说
scp exits with 0 on success or >0 if an error occurred.