【问题标题】:Progress bar repeating when I run a command remotely远程运行命令时进度条重复
【发布时间】:2014-07-24 04:11:58
【问题描述】:

当我通过 ssh 运行包含进度条(如 phpunit 或 wget)的远程命令而不是获取更新的进度条时,我得到重复的标准输出条堆叠:

 $ ssh user1@server1 some_command

 -------------------------------
 ##-----------------------------
 ######-------------------------
 #######------------------------
 ###########--------------------
 ##############-----------------
 ########################-------
 etc

是否有任何我可以运行/管道的命令将这些行重新呈现在前一行之上(因此栏就像我在本地运行命令一样工作)?

【问题讨论】:

  • 显然您的本地终端不支持远程程序用来覆盖这些行的控制字符。
  • 尝试使用-t强制伪tty分配?
  • 如果我 ssh 并以本地用户身份运行命令,它运行良好 - 远程运行命令(不直接使用服务器上的会话)似乎有所不同。任何想法如何弄清楚有什么不同?

标签: bash ssh


【解决方案1】:

该命令正在使用 ANSI 终端(控制序列)的功能来呈现进度条。使用这些控制字符的编写良好的程序将在使用它们之前检查其输出是否进入交互式终端。这是因为如果程序的输出不是像管道(或通过 ssh 的套接字)这样的交互式终端,控制序列通常会弄乱输出。

libc 为该检查定义了函数 isatty(),我敢打赌程序正在使用它。

前段时间我写了一个答案,展示了如何使用自定义的 isatty() 函数欺骗程序,在 libc 之前使用 LD_PRELOAD 链接,让我再次找到它......

...这里是Bash: trick program into thinking stdout is an interactive terminal

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多