linux 终端控制-- 多彩输出 格式排版

在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用。
先来个实际的例子,在屏幕的最上部的右侧输出当前时间,一秒刷新一次。可能会想到使用类似Ncurse的框架完成,不过这有简单的遵守terminal控制格式的字符流规则,我们为什么不用呢。

  1. while true; do echo -ne "\e[s\e[0;$((COLUMNS-27))H$(date)\e[u"; sleep 1; done &

当然,有个tput的版本:

  1. while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &

这里我写了个格式串的说明

点击(此处)折叠或打开

  1. 终端显示的带有ansi控制的字符串 := \(<控制单元>[字符串]\)\+
  2. 控制单元 := \(<起始标记><控制元素>\)\+<结束标记>
  3. 起始标记 := \e \| \x1b \| \033
  4. 结束标记 := m
  5. 字符串 := 要输入的字符
  6. 控制元素:= <元素起始标记>\[ 0 1 4 5 7 8 前景色;背景色 背景色;前景色 \|
  7. 光标相对位置控制 光标坐标 2J K s u ?25l ?25h \]
  8. 元素起始标记:=[
  9. 前景色 := 30-37 # 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色
  10. 背景色 := 40-47 # 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色
  11. 光标坐标 := y;xH # 不要忘记H
  12. 光标相对位置控制 := <n行><方向>
  13. n行 := 整数
  14. 方向 := \[ A B C D \] #分别代表了向 上 下 右 左
  15. 0 := 关闭所有属性
  16. 1 := 设置高亮度
  17. 4 := 下划线
  18. 5 := 闪烁
  19. 7 := 反显
  20. 8 := 消隐
  21. 2J := 清屏
  22. K := 清除从光标到行尾的内容
  23. s := 保存光标位置
  24. u := 恢复光标位置
  25. ?25I := 隐藏光标
  26. ?25H := 显示光标

这样解析下bash版本的字串 "\e[s\e[0;$((COLUMNS-27))H$(date)\e[u" 。
\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版

  1. echo -e ‘\033[31;47;1mhello word\033[0m‘
  2. 或者
  3. printf ‘\e[31;47;1mhello word\033[0m \n‘

c 版本

  1. #include <stdio.h>
  2. int main(){
  3. printf("\e[31;47;1mhello word\033[0m \n");
  4. return 0;
  5. }

python版本

  1. print "\033[31;47;1mhello word\033[0m \n"

发现 python中\e 是不可以使用的。

在PS1中我们可以让提示更丰富多彩
例如我的PS1变量为

  1. 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\] "

如果在设置了PS1后,不能正确的计算自动换行,那么用‘\[‘和‘\]‘吧转义序列括起来试试
ok了
遇到中文字符就悲剧了,把标题中含有中文字符的选项去掉就行了,这是我在ubuntu的中文环境下测试的

  1. 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.html

tpu 介绍 http://www.ibm.com/developerworks/cn/aix/library/au-learningtput/index.html

很详细的 http://venus585625.iteye.com/blog/1174567

时间: 2024-10-16 18:01:11

linux 终端控制-- 多彩输出 格式排版的相关文章

LINUX终端调用DOS输出字符输出显示乱码问题

场景:linux通过winsshd向window2003 cmd发送查询指令 环境:linux CRT远程连接 终端设置UTF-8(国际码) 问题:命令执行完毕,LINUX终端显示为乱码 过程: 1.在进行linux批量管理window2003服务器时检查策略,在CRT终端显示乱码: 2.检查DOS输出字符集--属性--(我的是GBK) 错误3.将脚本及环境变量全部改为GBK,CRT同,输出结果还是乱码 改 4.将CRT终端字符集全部改成GB2312(shell中无需改动,字符集LANG不用变)

通过printf设置Linux终端输出的颜色和显示方式

前言 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关. 本文简要介绍C语言中通过printf改变终端输出的颜色和显示方式.文中涉及的代码运行环境如下: 正文 转义序列以控制字符'ESC'开头.该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033.多数转义序列超过两个字符,故通常以'ES

linux 终端输出颜色

在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关. 转义序列以控制字符'ESC'开头.该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033.多数转义序列超过两个字符,故通常以'ESC'和左括号'['开头.该起始序列称为控制序列引导符(CSI,Control Sequence Intro)

Linux终端和win32控制台文本颜色输出

在使用putty.secureCRT.XShell等终端仿真器连接linux系统时,ls.vim等工具的输出都含有各种颜色,这些颜色的输出大大地增强了文本的可读性. 通常我们可以使用echo命令加-e选项输出各种颜色的文本,例如:echo -e "\033[31mRed Text\033[0m",可以输出红色的字体“Red Text”.其中:"\033[31m"和"\033[0m"是ANSI转义序列(ANSI escape code/sequen

Linux汇总一——Linux程序管理,Linux终端,Linux命令格式、命令类型及Linux命令帮助

本章blog主要汇总了Linux程序管理,linux应用程序的分类,Linux终端类型,Linux命令格式.命令类型及Linux命令帮助等相关知识点,并介绍了man命令,which命令,type命令,tty命令,hash命令,dirname命令,basename命令,who命令的相关功能及选项. 本章Blog相关Linux知识点 计算机=硬件+软件 . 冯诺依曼理论,五大部件:CPU -- 运算器.控制器, 存储器,输入设备,输出设备. Shell 环境是通过环境变量进行配置的 ,环境变量保存对

linux终端颜色控制

引言: 由于在c代码中看到过打印彩色字, 又对PS1 想进一步了解,才有了这篇博文.----------------------------------------Linux 终端控制台字体颜色  ----------------------------------------Linux 终端控制台字体颜色,用到一个 转义序列\e[F;B;Om\e 转义字符开始,ESC 的 ASCII 码用十进制表示就是 27,等于用八进制表示的 033. \e 或 \033 声明了转义序列的开始, [ 开始定

终端控制和和信号——《Unix/Linux编程实践教程》读书笔记(第6章)

1.有些程序处理从特定设备来的数据.这些与特定设备相关的程序必须控制与设备的连接.Unix系统中最常见的设备是终端. 2.终端驱动程序有很多设置.各个设置的特定值决定了终端驱动程序的模式.为用户编写的程序通常需要设置终端驱动程序为特定的模式. 3.键盘输入分为3类,终端驱动程序对这些输入做不同的处理.大多数建代表常规数据,它们从驱动程序传输到程序.有些键调用驱动程序中的编辑函数.如果按下删除键,驱动程序将前一个字符从它的行缓冲中删除,并将命令发送到终端屏幕,使之从显示器中删除字符.最后,有些键调

Linux学习_随笔:输出重定向 &gt; log,由于print打印的内容过多,linux终端上显示不出完全信息

在调试代码的时候,我们时常借助print语句来进行调试.但有时,由于打印的内容过多,linux终端上显示不出完全信息. 1.此时我们可以借助命令:./test > log 或者是 ./test >> log 这样就把所有正确的信息都打印到log中,不正确的信息会打印到终端上. 注解: (1)> 是定向输出到文件,如果文件不存在,就创建文件:如果文件存在,就将其清空:一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节): (

linux终端 提示信息 格式 修改 /etc/bashrc

gedit /etc/bashrc shell环境下默认的特殊符号意义: \d :代表日期,格式为weekday month date,例如:"Sun Sep 18" \H :完整的主机名称.例如:我的机器名称为:redhat.linux,则这个名称就是fc4.linux \h :仅取主机的第一个名字,如上例,则为redhat.linux,.linux则被省略 \t :显示时间为24小时格式,如:HH:MM:SS \T :显示时间为12小时格式 \A :显示时间为24小时格式:HH:M