如何让pv工具在远程SSH会话中正常显示进度?
如何让pv工具在远程SSH会话中正常显示进度?
我之前也碰到过一模一样的问题,其实原因很直观:远程运行的pv检测不到交互式终端环境——毕竟它的输出被管道传到了本地的gunzip,而且默认SSH远程执行命令时是非交互式会话,所以pv自动跳过了进度输出。
给你两个实用的解决办法:
方法一:强制pv输出进度(推荐)
用pv的-f(--force)参数,让它不管有没有终端都强制把进度信息输出到stderr(默认就是stderr,会被SSH转发到你的本地终端)。把命令改成这样:ssh user@server.eu "pv -f ~/Documents/Local/staging.sql.gz" | gunzip > /dev/null要是想看到更详细的进度数据(比如百分比、已用时间、预计完成时间),可以再加几个参数:
ssh user@server.eu "pv -ptef ~/Documents/Local/staging.sql.gz" | gunzip > /dev/null这里
-p显示进度百分比,-t显示已消耗时间,-e显示预计完成时间,-f负责强制输出进度。方法二:让SSH分配伪终端
用ssh的-t参数给远程会话分配一个伪终端,这样pv会以为自己在交互式终端里,自然就会输出进度了:ssh -t user@server.eu "pv ~/Documents/Local/staging.sql.gz" | gunzip > /dev/null不过这个方法偶尔会因为终端控制字符出现奇怪的输出,要是遇到这种情况,换回方法一就没问题。
备注:内容来源于stack exchange,提问作者Anton Duzenko
相关产品推荐
相关产品推荐

