【问题标题】:multi-line terminal progress indicator?多行终端进度指示器?
【发布时间】:2010-12-31 14:16:58
【问题描述】:

在终端中,如果我在原地输出某种单行进度指示器,\r 就可以解决问题:

while (1) { echo "progress indication\r"; }

但是,我有一个真正应该是多行的进度指示器。由于\r 只返回到当前行的开头,我想要一些可以向上移动几行的东西。是否有控制字符/功能可以让我在终端中退行?

编辑:如果我不完全清楚,我希望有一些与\v 大致相反的东西,垂直标签,它将终端光标向下移动一行。

【问题讨论】:

    标签: php


    【解决方案1】:

    没有控制字符可以返回上一行,但根据 TERM= 类型,ANSI 转义可能会起到作用。

    echo -e "\033[2A"
    

    这里有一个可能更有帮助的列表:http://en.wikipedia.org/wiki/ANSI_escape_code 和在 shell 中使用 http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html

    【讨论】:

    • 最初,我认为您的答案是错误的,因为输出开始迅速上升。但是,感谢您的链接,我意识到2 不是“向上移动一行”代码的一部分,而是意味着“向上移动两行”。所以我真的是我想要的两倍。 \033[5A 非常适合我,非常感谢。顺便问一下,PHP中是否有一个安全函数来测试终端是否支持ANSI转义码(以避免在不支持的终端上打印转义码)?
    • @DelanAzabani:不,无法安全确定。您可以查看$_ENV['TERM'] 来猜测它是否受支持。但是 ANSI 转义序列具有最普遍的支持,甚至应该在 Windows 上工作。在 Linux 上,它适用于所有 xterm 变体和控制台。作为替代方案,您可以查看 PHP ncurses 扩展。
    • 谢谢你;你的建议很有帮助。
    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 2011-12-06
    • 2011-09-29
    • 2021-05-10
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多