就像apt-get的这张照片一样,我怎么能在线的末尾打印一些东西,就像屏幕上的速度一样。虽然我可以像\e[C
一样使用转义来使它向右移动几列并打印,但速度会有所不同而且字符串长度会有所不同。谁能告诉我怎么做?我目前正在使用bash编程。感谢。
答案 0 :(得分:2)
通常,您会在环境变量COLUMNS
中找到控制台窗口的宽度,但这并不完全可靠。更可靠的解决方案是使用参数tput
的{{1}}实用程序(ncurses的一部分,但可以单独使用):
cols
分割文本的一种简单方法是使用Posix标准$ echo $COLUMNS
148
$ tput cols
148
实用程序首先打印要在填充到列宽的右边距上对齐的文本,然后输出回车符({{1} })将光标返回到行的开头,然后打印要在左边距上对齐的文本。最后,换行符将移至下一行。或者,在代码中:
printf
\r
格式使用# Call it like this:
# print_both_sides "This goes on the left" "and this goes on the right."
print_both_sides() {
printf "\r%*s\r%s\n" $(tput cols) "$2" "$1";
}
替换的标准功能来处理字段宽度和精度格式修饰符; printf
表示应从参数中获取相应的数字。在这种情况下,我使用*
- 即控制台窗口的宽度 - 作为格式代码*
的第一个参数,它具有右边填充下一个字符串参数的效果({ {1}})在宽度恰好是控制台宽度的字段中。
如果光标当前不在左边距,我在输出的开头添加了一个回车符。
答案 1 :(得分:1)
在终端中,有多种方法可以获得实际的屏幕宽度:
stty -a
中显示的正确值(columns
值通常位于报告的第一行)。< / LI>
tput
实用程序查询此信息,覆盖终端数据库中列数的任何常量值,并可以打印它,例如tput cols
LINES
和COLUMNS
通常覆盖全屏应用程序(包括使用curses的那些应用程序:请参阅use_env
)。resize
更新stty
设置并可选择更新LINES
和COLUMNS
。使用转义序列进行打印时,有几种不同的方法可以使用有关屏幕宽度的信息,这些信息得到广泛支持。命令行tput
实用程序也可以从终端描述中检索这些内容(可能缺少特定功能):
tput cup $row $column
tput hpa $column
tput cuf $value
,以给定数量的单元格向前(向右)移动。关于这个问题,使用像这样的参数通常比重复单个动作要快tput
cuf1
。功能cup
,hpa
,cuf
通常对应于ECMA-48中的名称,并在terminfo(5)手册页中进行了描述。
要在屏幕右侧打印文本,您可以这样做:
echo
或printf
。后者具有更大的灵活性。如果您使用命令行printf
实用程序,您可能会记住,当您想知道 width 时,不能很好地支持处理多字节字符(如UTF-8)对于给定的字符串,可移植性可能是一个问题。
进一步阅读: