我想要在终端上重复写入多行文本。就像这样:
echo "One Line"
echo "Two Lines"
echo "\r\b\rThree Lines"
echo "Four Lines"
理想情况下,这将首先输出:
One Line
Two Lines
然后这个输出将被替换为
Three Lines
Four Lines
问题在于,虽然回车符可以让你覆盖一行输出,但是你无法通过\b跳过\n。那么如何覆盖多行呢?
我找到了一个解决方案,需要进行一些挖掘,但我仍然不完全确定它是如何工作的。不过,似乎程序 "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"
然后你将会得到期望的输出。
echo -e "$UPLINE$ERASELINE$UPLINE$ERASELINE\c"
。而"\c"的意思是您删除了最后一个换行符或类似的内容;我怀疑这是bashism?无论如何,非常感谢您的答案,它非常有帮助! - Esmu Igors