我在 Mac OS X 和 Lubuntu 上使用 bash。当我制作控制台应用程序时,最烦人的事情之一是
clear
会将整整 (x 行) 行添加到控制台。然后我重写屏幕,这很耗时且效率低下。
相反,我正在寻找一种方法来使我的应用程序不创建额外的行并重写当前显示的字符。(如“top”命令)
例如,我的应用程序需要让控制台左上角的数字尽快上升。
示例 #1:使用 clear
#!/bin/bash
for i in `seq 1 1000000`
do
echo $i
clear
done
除了它会“闪烁”、有时挂起、浪费控制台空间并且总体上很丑之外,这会很棒。
示例 #2:使用退格键
#!/bin/bash
echo -e "\033[8;5;10;t"
clear
echo -e -n "0"
for i in `seq 1 1000000`
do
echo -e -n "\b\b\b\b\b\b\b$i"
done
这个程序运行起来非常好,不会产生多余的线条,而且速度很快,但它只能在小窗口中运行。
示例 3:使用“top”和“alsamixer”所做的重写公式。
我该如何做这个例子?
答案1
看一眼这;特别是我推荐这个tput
例子,因为它或多或少可以实现你所想的,并且在 shell 脚本中相当轻量级——而直接回显转义序列则不是。tput
还尊重 termcap/terminfo,这将有助于使你的脚本更具可移植性。
答案2
您正在寻找\r
,即回车符。它会导致新文本覆盖光标位置上的内容:
#!/bin/bash
for i in `seq 1 1000000`
do
echo -e -n "$i\r"
done