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


0

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

    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 在他们特定的星球大战版本的开头。我设法通过阅读另一个问题让它们出现在中心,但我发现不可能让第二行从第一行的同一行开始。有线索吗?


你的问题与此无关 c
DavidPostill

@DavidPostill对不起我认为添加一个C标签可以帮助更多人看到我的问题,因为我认为bash printf的工作方式与C类似。
xvlaze

Answers:


0

问题是你有一个 \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 最后将提示放到自己的行上


这给我一个错误,(第12行:printf:%\ r \ n:无效数字),但使用您之前的评论作为参考,我设法让它工作。谢谢!
xvlaze

@xvlaze对此我很抱歉,我更新了我的答案并修复了算术部分
Eric Renouf

完美的工作。更干净!
xvlaze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.