某些程序如何编辑终端上显示的内容(选择随机示例,程序'sl')?我在想这里的Linux终端,它也可能发生在其他操作系统中,我不知道。我一直以为一旦显示了一些文字,它就会留在那里。如何在不重绘整个屏幕的情况下进行更改?
答案 0 :(得分:6)
根据您发送控制语言的终端。常见的序列例如是esc [; H,以将光标发送到特定位置(例如,在Ansi,Xterm,Linux,VT100上)。但是,这将随用户的类型或终端而变化... curses(与terminfo文件一起)将为您包装该信息。
答案 1 :(得分:5)
试试这个shellcript
#!/bin/bash
i=1
while [ true ]
do
echo -e -n "\r $i"
i=$((i+1))
done
-n选项会阻止换行...并且\ r \ n会回滚...你会一次又一次地写入同一行 - 没有滚动或者什么都没有
答案 2 :(得分:4)
如果使用回车符('\ r')而不是换行符('\ n')终止发送到终端的行,它会将光标移动到当前行的开头,允许程序在之前打印的内容上打印更多文本。我偶尔会将此用于长期任务的进度消息。
如果您需要进行更多的终端编辑,请使用ncurses或其变体。
答案 3 :(得分:4)
许多应用程序使用curses库或某种语言绑定它。
对于单行重写,例如更新进度信息,通常由转义序列“\ r”指定的特殊字符“carriage return”可以将光标返回到当前行的开头后续输出将覆盖之前写入的内容。
答案 4 :(得分:2)
有些字符可以发送到终端,将光标移回。然后可以覆盖文本。
有一个列表here。注意“移动光标”行。
答案 5 :(得分:1)
Corporal Touchy已经回答了如何在最低级别完成这项工作。为了便于开发,curses library提供了比简单地将字符发送到终端更高级别的控制。
答案 6 :(得分:1)
NCurses是一个跨平台的库,可让您在智能终端上绘制用户界面。
答案 7 :(得分:0)
在@Corporal Touchy的答案的基础上,有一些库可以为您处理某些功能,例如curses/ncurses
答案 8 :(得分:0)
我同意danio,ncurses是要走的路。这是一个很好的教程: