如何在shell脚本中覆盖多行?

时间:2013-05-25 00:53:49

标签: shell echo sh

我想一遍又一遍地写多行。像

这样的东西
echo "One Line"
echo "Two Lines"
echo "\r\b\rThree Lines"
echo "Four Lines"

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

One Line
Two Lines

然后将此输出替换为

Three Lines
Four Lines

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

1 个答案:

答案 0 :(得分:9)

我找到了一个解决方案,需要一点点挖掘,我仍然不完全确定这个是如何工作的。但是,似乎程序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"

您将获得所需的输出。