如何用另一行覆盖 echo/printf 行?(使其从屏幕中心开始)

如何用另一行覆盖 echo/printf 行?(使其从屏幕中心开始)

我想编写一个脚本来输出我选择的句子。我希望它们出现在屏幕中央:输出第一个句子,然后让第二个句子出现在第一个句子上方。这是我的代码:

    COLUMNS=$(tput cols) 

printf "%*s\n" $((($COLUMNS)/2)) "Hey, welcome to my script!" "%\r"
sleep 2
printf "%*s" $((($COLUMNS)/2)) "This is a new line!"

我的目的是用第二行覆盖第一行,就像telnet towel.blinkenlights.nl在特定星球大战版本的开头一样。我通过阅读另一个问题设法让它们出现在中心,但我发现不可能让第二行从第一行的同一行开始。有什么线索吗?

答案1

\n问题是,第一个 中有一个printf。这会使光标移动到下一行,因此当您打印新文本时,它不在同一行上以覆盖旧文本。如果您删除它,您应该会很好:

COLUMNS=$(tput cols) 

printf "%*s\r" $((COLUMNS/2)) "Hey, welcome to my script!"
sleep 2
printf "%*s" $((COLUMNS/2)) "This is a new line!"
printf "\n"

我修正了你关于\r错误的正确观察,并稍微简化了数学。然后我添加了最后一个\n,以便将提示放在最后的一行上

相关内容