linux 终端控制-- 多彩输出 格式排版
在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用。
先来个实际的例子,在屏幕的最上部的右侧输出当前时间,一秒刷新一次。可能会想到使用类似Ncurse的框架完成,不过这有简单的遵守terminal控制格式的字符流规则,我们为什么不用呢。
当然,有个tput的版本:
这里我写了个格式串的说明
这样解析下bash版本的字串 "e[se[0;$((COLUMNS-27))H$(date)e[u" 。
e[s :保存光标位置
e[0;$((COLUMNS-27))H 在终端第一行的倒数27个字符的位置开始打印字符
$(date) 打印date命令的输出
[u 恢复光标位置
这样控制太爽了!!!
我写的这种格式看着不爽,参考这个
先来个实际的例子,在屏幕的最上部的右侧输出当前时间,一秒刷新一次。可能会想到使用类似Ncurse的框架完成,不过这有简单的遵守terminal控制格式的字符流规则,我们为什么不用呢。
- while true; do echo -ne "e[se[0;$((COLUMNS-27))H$(date)e[u"; sleep 1; done &
- while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &
点击(此处)折叠或打开
-
终端显示的带有ansi控制的字符串 := (<控制单元>[字符串])+
-
控制单元 := (<起始标记><控制元素>)+<结束标记>
-
起始标记 := e | x1b | 33
-
结束标记 := m
-
字符串 := 要输入的字符
-
控制元素:= <元素起始标记>[ 0 1 4 5 7 8 前景色;背景色 背景色;前景色 |
-
光标相对位置控制 光标坐标 2J K s u ?25l ?25h ]
-
元素起始标记:=[
-
前景色 := 30-37 # 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色
-
背景色 := 40-47 # 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色
-
光标坐标 := y;xH # 不要忘记H
-
光标相对位置控制 := <n行><方向>
-
n行 := 整数
-
方向 := [ A B C D ] #分别代表了向 上 下 右 左
-
0 := 关闭所有属性
-
1 := 设置高亮度
-
4 := 下划线
-
5 := 闪烁
-
7 := 反显
-
8 := 消隐
-
2J := 清屏
-
K := 清除从光标到行尾的内容
-
s := 保存光标位置
-
u := 恢复光标位置
-
?25I := 隐藏光标
- ?25H := 显示光标
e[s :保存光标位置
e[0;$((COLUMNS-27))H 在终端第一行的倒数27个字符的位置开始打印字符
$(date) 打印date命令的输出
[u 恢复光标位置
这样控制太爽了!!!
我写的这种格式看着不爽,参考这个
字背景颜色 字颜色 ANSI控制码的说明 40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色033[0m 关闭所有属性