bash 和 ansi 转义码

bash 和 ansi 转义码

我想做这样的事情:

user@myserver$echo -en "\rSome text to overwrite same line command is on"

问题是我最终得到的是这样的:

Some text to overwrite same line command is onuser@myserver$

如果我echo -e这样做的话我会得到这个:

Some text to overwrite same line command is on

user@myserver$

这没问题,只是它会导致控制台滚动。我不希望它滚动,因为我的 tmux 控制台窗口只有一行高。我尝试用空格填充字符串的右侧,但这无法正常工作。

答案1

$ echo -en "\rSome text"

在这里,\r没有做太多事情,因为它将光标返回到行的开头,但是在命令行上按 Enter 键后,光标已经位于提示后面的行的开头。就像在一个简单的 echo 中一样,输出在其自己的一行中:

$ echo foo
foo

因此,您无法很好地覆盖相同的命令行(至少在此之前不滚动新命令行)。但如果您只关心显示的最后一行,则不需要这样做。你只需要防止下一个打印提示。您可以read在继续之前等待一些输入(按 Enter 键)。光标停留在_后面bar

$ echo -n foo bar ; read
foo bar_

答案2

尝试

echo -en "\rSome text to overwrite same line command is on\n"

相关内容