linux 终端控制-- 多彩输出 格式排版
2015-09-04 12:37
525 查看
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 &
当然,有个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 恢复光标位置
这样控制太爽了!!!
我写的这种格式看着不爽,参考这个
例子
输出白底红字的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\] "
参考
在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用。
先来个实际的例子,在屏幕的最上部的右侧输出当前时间,一秒刷新一次。可能会想到使用类似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\] "
参考
相关文章推荐
- linux 怎么使用一个c/c++库
- linux内核编译环境配置
- linux内核编译环境配置
- 并发与竞态控制
- 20150827-Linux grep文本过滤工具及正则表达式
- Linux file viewer command:cat, tac, more, less, tail, head
- 每天一个Linux命令
- [Linux运维] 基本服务rc
- 在Ubuntu(Linux)上获取root权限
- arm平台移植mplayer
- Linux系统管理-(8)-RPM程序包管理器
- CentOS 7 挂载本地光盘作为镜像源
- 【Linux】【C/C++】多进程协同词频统计
- Basic Linux Commands :date, clock, hwclock, cal, ls, pwd, whereis, which, who, w, whoami
- centos6安装bt工具transmission
- centos6安装bt工具transmission
- Linux内核中fasync机制对RCU锁的使用
- 【Linux】【C/C++】十叉非完全树的构造和重构
- 如何成为一个Linux内核开发者
- Linux 下以其他用户运行程序