linux|linux 终端控制-- 多彩输出 格式排版
linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用。
先来个实际的例子,在屏幕的最上部的右侧输出当前时间,一秒刷新一次。可能会想到使用类似Ncurse的框架完成,不过这有简单的遵守terminal控制格式的字符流规则,我们为什么不用呢。
- while true; do echo -ne "\e[s\e[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 &
【linux|linux 终端控制-- 多彩输出 格式排版】 点击(此处)折叠或打开
- 终端显示的带有ansi控制的字符串 := \(<控制单元>[字符串]\)\+
- 控制单元 := \(<起始标记><控制元素>\)\+<结束标记>
- 起始标记 := \e \| \x1b \| \033
- 结束标记 := 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行 := 整数
- 方向 := \[ 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 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \33[37m 设置前景色
\033[40m -- \33[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y; xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
输出白底红字的hellow word
#bash版
- echo -e '\033[31;
47;
1mhello word\033[0m'
- 或者
- printf '\e[31; 47; 1mhello word\033[0m \n'
- #include .h>
-
- int main(){
-
- printf("\e[31;
47;
1mhello word\033[0m \n");
- return 0;
- }
- print "\033[31; 47; 1mhello word\033[0m \n"
在PS1中我们可以让提示更丰富多彩
例如我的PS1变量为
- PS1="\[\e]2 \u | \d \t | \H | \w\a\e[40; 32; 1m\]\h:\[\e[40; 35; 1m\]\W\[\e[40; 33; 1m\]\\$\[\e[0m\] "
ok了
遇到中文字符就悲剧了,把标题中含有中文字符的选项去掉就行了,这是我在ubuntu的中文环境下测试的
-
PS1="\[\e]2 \u | \t | \H | \w \e[40; 32; 1m\]\h:\[\e[40; 35; 1m\]\W\[\e[40; 33; 1m\]\\$\[\e[0m\] "
参考
例子 http://www.commandlinefu.com/commands/view/11504/put-a-console-clock-in-top-right-corner介绍 http://blog.sina.com.cn/s/blog_704836f40101awsd.htmltpu 介绍 http://www.ibm.com/developerworks/cn/aix/library/au-learningtput/index.html很详细的 http://venus585625.iteye.com/blog/1174567
推荐阅读
- Node.js中readline模块实现终端输入
- Linux下面如何查看tomcat已经使用多少线程
- Beego打包部署到Linux
- 我的拖延症如何控制了我,又一次
- 真正的爱
- Linux|109 个实用 shell 脚本
- linux定时任务contab
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- day16-Linux|day16-Linux 软件管理
- 如何在阿里云linux上部署java项目