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

linux 终端控制-- 多彩输出 格式排版相关推荐

  1. linux终端打印保存到文件,Linux 终端中命令输出保存到文件中的方法

    当你在 Linux 终端中运行命令或脚本时,它会在终端中打印输出方便你立即查看. 有时你需要将输出保存到文件中以备将来参考.当然你可以在 Linux 终端中复制和粘贴,但是有更好的方法可以在 Linu ...

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

    场景:linux通过winsshd向window2003 cmd发送查询指令 环境:linux CRT远程连接 终端设置UTF-8(国际码) 问题:命令执行完毕,LINUX终端显示为乱码 过程: 1. ...

  3. linux 终端与shell输出大小不匹配

    改变shell输出大小 在使用一个终端(例如iterm2)打开一个ssh连接之后,如果改变终端窗口大小,这时候shell输出和终端大小会不匹配.这时候执行命令 /usr/bin/resize 或者直接 ...

  4. linux终端字体颜色_使用printf打印出各种颜色字体

    我的博客:https://blog.csdn.net/qq_37388044 我的知乎:https://www.zhihu.com/people/bbtganmin 联系方式:知乎私信 转载或者引用本 ...

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

    前言 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文 ...

  6. linux 如何查看终端格式,你应该还不知道,Linux终端下的 Markdown 文档查看器

    原标题:你应该还不知道,Linux终端下的 Markdown 文档查看器 现在,Markdown 差不多已经成为技术文档的标准.它可以实现技术文档的快捷写作,以及输出发布.同样都是标记语言,但Mark ...

  7. linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式

    转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...

  8. linux终端用什么颜色好,linux 终端输出颜色

    在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...

  9. Linux终端程序用c语言实现改变输出的字的颜色 (转)

    Linux终端程序用c语言实现改变输出的字的颜色    格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;3 ...

最新文章

  1. 3D游戏设计和创作工具学习教程 3D Game Design Creation Tools
  2. Matlab数据的可视化 -- 条形图
  3. R语言str_starts函数和str_ends函数检查在字符串的开头或者结尾是否存在特定字符串或者字符串模式
  4. 机器学习博士自曝:实验室「阉割」我的创造力,劝你别读!
  5. ugui源码_UGUI 源码笔记(一)文件结构和部分组件使用
  6. php查找特定字符并替代,php怎样查找替代字符串_后端开发
  7. 匿名对象和类名为数据类型(java)
  8. 获取页面iframe里的元素
  9. 计算机等级考试--二级Java的知识点大全
  10. bt种子php啥格式的,bt种子是什么意思(bt种子的格式及文件结构)
  11. PXE网络启动 windows PE (使用微软官方工具)
  12. java毕业设计——基于java+mysql+socket的即时通讯软件设计与实现(毕业论文+程序源码)——即时通讯软件
  13. 中国知名科幻网站列表
  14. 【华为云计算产品系列】云上迁移工具RainBow实战详解
  15. 免费开放API支付接口
  16. 手机充电原理分析及问题总结
  17. 什么是lora无线通讯
  18. c#控件listview
  19. 嵌入式ARM下使用ALSA USB声卡
  20. 小白安装Revit2021的Lookup和Manager文件步骤(附文件)

热门文章

  1. 数据不一致问题排查1
  2. 基建管控系统_科技|电力北斗科技创新为数字新基建赋能
  3. 页面浏览事件之 $AppViewScreen 全埋点
  4. 安装Discuz!论坛
  5. 7.1 安装软件包的三种方法 7.2 rpm包介绍 7.3 rpm工具用法 7.4 yum工具用法 7.5 yum搭建本地仓库...
  6. 布点算法的原理和实现
  7. Android使用开源项目Xutils实现多线程下载文件
  8. Polya原理的应用经典实例
  9. 设计模式之四(抽象工厂模式第一回合)
  10. 中兴F460破解超管及远程管理