linux 终端控制-- 多彩输出 格式排版
先来个实际的例子,在屏幕的最上部的右侧输出当前时间,一秒刷新一次。可能会想到使用类似Ncurse的框架完成,不过这有简单的遵守terminal控制格式的字符流规则,我们为什么不用呢。
- while true; do echo -ne "\e[s\e[0;$((COLUMNS-27))H$(date)\e[u"; sleep 1; done &
当然,有个tput的版本:
- while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &
这里我写了个格式串的说明
点击(此处)折叠或打开
- 终端显示的带有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行><方向>
- n行 := 整数
- 方向 := \[ A B C D \] #分别代表了向 上 下 右 左
- 0 := 关闭所有属性
- 1 := 设置高亮度
- 4 := 下划线
- 5 := 闪烁
- 7 := 反显
- 8 := 消隐
- 2J := 清屏
- K := 清除从光标到行尾的内容
- s := 保存光标位置
- u := 恢复光标位置
- ?25I := 隐藏光标
- ?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版
- echo -e '\033[31;47;1mhello word\033[0m'
- 或者
- printf '\e[31;47;1mhello word\033[0m \n'
c 版本
- #include <stdio.h>
- int main(){
- printf("\e[31;47;1mhello word\033[0m \n");
- return 0;
- }
python版本
- print "\033[31;47;1mhello word\033[0m \n"
发现 python中\e 是不可以使用的。
在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\] "
如果在设置了PS1后,不能正确的计算自动换行,那么用'\['和'\]'吧转义序列括起来试试
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.html
tpu 介绍 http://www.ibm.com/developerworks/cn/aix/library/au-learningtput/index.html
很详细的 http://venus585625.iteye.com/blog/1174567
linux 终端控制-- 多彩输出 格式排版的更多相关文章
- 通过printf设置Linux终端输出的颜色和显示方式
转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...
- linux 终端输出颜色
在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...
- Linux终端和win32控制台文本颜色输出
在使用putty.secureCRT.XShell等终端仿真器连接linux系统时,ls.vim等工具的输出都含有各种颜色,这些颜色的输出大大地增强了文本的可读性. 通常我们可以使用echo命令加-e ...
- Linux - Linux 终端命令格式
Linux 终端命令格式 目标 了解终端命令格式 知道如何查阅终端命令帮助信息 01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应 ...
- No-3.Linux 终端命令格式
Linux 终端命令格式 01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应功能的英文单词或单词的缩写 [-options]:选项 ...
- Linux 终端命令格式
Linux 终端命令格式 一.目标 了解终端命令格式 知道如何查阅终端命令帮助信息 二. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相 ...
- 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量
背景 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ...
- linux终端颜色控制
引言: 由于在c代码中看到过打印彩色字, 又对PS1 想进一步了解,才有了这篇博文.----------------------------------------Linux 终端控制台字体颜色 - ...
- linux终端c语言改变输出字体颜色
Linux下C改变输出字体颜色 例: #include int main() { printf("\033[31mThis is RED.\n\033[0m"); return 0 ...
随机推荐
- perl 面向对象 use base
1.XXX.pm 文件里面的第一行要是:package XXX: 2.要有构造函数 sub new,实现如下: sub new { my $class = shift; # Get the reque ...
- 基于visual Studio2013解决C语言竞赛题之0802图书信息查询
题目 解决代码及点评 /* 功能:有一批图书,每本书有:书名(name),作者(author) , 编号(num),出版日期(date)四个数据, 希望输入后按书名的字母顺序将各书的记录排列好, ...
- 一步一步重写 CodeIgniter 框架 (3) —— 用面向对象重构代码
前面两篇文章为了重点突出 CodeIgniter 框架的原理,程序的结构很乱,有很多全局变量,在这一课中我们采用面向对象的方法对原先代码进行重构. 到目前为止,程序主要完成的就是 URL 分析,并根据 ...
- P65
#include<stdio.h> #define N 6 main() { char c[N]; int i=0; for(;i<N;c[i]=getchar(),i++); pr ...
- PHP - 目录与文件
第6章 目录与文件 学习要点: 1.目录操作 2.磁盘.目录和文件计算 3.文件处理 将相关的数据组织为文件和目录等实体,这一直是计算环境的核心概念.出于这个原因,程序员需要有一种方法来获得关于文件和 ...
- Route@简单应用
路由的简单应用(生成URL) 这篇文章讲的核心问题是利用路由系统生成URL但是我们,但是我们不是仅仅生成URL,我们的超链接的href属性中,我们在跳转的时候,都需要URL,我们要将的就是在这些实际情 ...
- Eclipse用法和技巧十八:减少不必要的输入
写代码的时候,很多人都有一个原则,尽量上输入.依靠IDE自动生成的代码,一般可读性,排版什么的都还是不错的,最主要的一般不会有什么低级错误.今天介绍几个在eclipse环境中,常用的依靠eclipse ...
- SharePoint 2013的100个新功能之搜索(二)
一:名称建议 人员搜索中新的“名称建议”功能,微软引入了一种简单.直观的方式来根据名称找到用户.输入一个或多个字符,查看全部以其开头的名称,在所有的用户描述数据库都可用,在人员索引中也因此一样可用.该 ...
- linux脚本:shell, 判断输入参数的个数(命令行)
if [ $# != 3 ] ; thenecho "USAGE: $0 from to"echo " e.g.: $0 ~/oucaijun/from ~/oucaij ...
- JSP 的9个内置对象
JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对象.如request,session,response,out等. 下面就JSP2. ...