5

我想一遍又一遍地写多行到终端。就像是

echo "One Line"
echo "Two Lines"
echo "\r\b\rThree Lines"
echo "Four Lines"

理想情况下,这将首先输出:

One Line
Two Lines

然后这个输出将被替换为

Three Lines
Four Lines

麻烦的是,虽然回车会让你覆盖一行输出,但你不能用 \b 越过 \n。然后如何覆盖多行?

4

1 回答 1

14

我找到了一个需要一点挖掘的解决方案,但我仍然不完全确定这个解决方案是如何工作的。但是,似乎程序 tput 将允许您获取用于清除行和定位光标的特殊字符。具体来说,tput el将清除到当前行的开头(而不是仅仅重新定位光标)。方便的是,tput cuu1将光标向上移动一行。因此,如果在 bash 脚本中声明变量,例如:

UPLINE=$(tput cuu1)
ERASELINE=$(tput el)

然后你可以像这样编写一个脚本:

UPLINE=$(tput cuu1)
ERASELINE=$(tput el)
echo "One Line"
echo "Two Lines"
echo "$UPLINE$ERASELINE$UPLINE$ERASELINE\c"
echo "Three Lines"
echo "Four Lines"

你会得到想要的输出。

于 2013-05-25T00:53:48.730 回答