当我在ssh上运行包含进度条(如phpunit或wget)的远程命令而不是获取更新的进度条时,我会重复堆栈的stdout吧:
$ ssh user1@server1 some_command
-------------------------------
##-----------------------------
######-------------------------
#######------------------------
###########--------------------
##############-----------------
########################-------
etc
是否有任何命令我可以运行/管道将重新渲染上一行(因此该栏的工作方式就像我在本地运行命令一样)?
答案 0 :(得分:0)
该命令使用ANSI终端(控制序列)的功能来呈现进度条。使用这些控制字符的编写良好的程序将在使用它们之前检查它的输出是否进入交互式终端。这是因为如果程序的输出没有像管道(或通过ssh的套接字)那样进入交互式终端,那么控制序列通常会使输出混乱。
libc为该检查定义了函数isatty()
,我打赌该程序正在使用它。
前段时间我写了一个答案,说明如何使用自定义isatty()
函数欺骗程序,在libc之前使用LD_PRELOAD
进行链接,让我再次找到....
......这里是Bash: trick program into thinking stdout is an interactive terminal