Bash 是一个交互程序,不过现在都是基于虚拟终端来实现,不同虚拟终端支持能力各有区别,这里简单介绍。
简介
在现在的 Linux 发行版本中,终端 (也被称为 Terminal 或者 Console) 是用作与主机交互的软件,不同平台的默认程序有所区别,例如 Gnome 中默认使用 Gnome Terminal 。
严格来说应该被称为 Terminal Emulator 也就是终端模拟器,通过软件模拟终端。其实最开始的时候,有单独的终端只负责与计算机交互,也就是接受键盘输入,然后将结果显示出来。
一台计算机可以有多个终端,而且有不同的型号,最经典的是 DEC 的 VT(Video-Terminal) 系列,例如 VT100、VT220 终端。 该终端会解析传输线上的电流,然后解析为 ASCII 值,并显示出来。
随着 PC 的出现,独立硬件的终端已经过时,通常是用软件仿真来实现,在 /usr/share/terminfo
目录下保存了 Linux 服务器所支持的终端类型。
终端类型
客户端远程连接到 Linux 服务器时,当前客户端所用的模拟终端类型就保存在了 $TERM
变量中,可以通过 echo $TERM
查看当前终端类型,也可以通过 toe -a
列出系统支持的所有终端类型。
vt220
相比vt100
有更多特性,例如支持F11
、F12
。xterm
是vt220
的超集,也就是兼容vt220
但有更多特性,例如前者支持颜色但是后者不支持,可在top
中z
按键测试。
TermInfo
不同终端支持的能力不同,用来定制终端的外观和交互行为,主要集中在对一些快捷键 (例如 F11
F12
)、颜色 (支持多少种,是否允许渐变) 等,所以,为了统一使用,提供了标准的 terminfo 数据库,其定义了不同终端支持的能力。
编译好的数据库文件保存在 /usr/share/terminfo
目录下,另外还可以检查 ncurses
的源码,通常通过如下命令查看。
----- 查看某个终端的属性
$ infocmp vt100
----- 比较两个类型终端的区别
$ infocmp vt100 vt200
在命令行中,可以通过 tput
命令操作,例如。
----- 查看当前终端支持的颜色
$ tput colors
----- 清屏
$ tput clear
----- 保存当前光标位置
$ tput sc
----- 将光标移动到第10行第13列
$ tput cup 10 13
----- 设置光标不可见
$ tput civis
----- 设置光标可见
$ tput cnorm
----- 显示输出
$ tput rc
----- 设置红色
$ tput setaf 1
----- 重置
$ tput sgr0
颜色设置
通过特定的字符序列可以设置字体格式以及颜色等信息,其格式 \033[前景色;背景色;属性m
,开始为 \033
\0x1b
\e
符号,也就是 ASCII 中的 <Esc>
,后续的分号内的内容顺序可变,其中 \033[0m
表示恢复之前的颜色。
----- 基本文本属性
[0m sgr0 重置所有属性
[1m bold 粗体
[2m dim 斜体
[3m smso 标准
[4m smul 下划线
[5m blink 闪烁
[7m rev 反向
[8m invis 隐藏
----- 设置前景色,将3修改为4为设置背景色,同样将setaf修改为setab
[30m setaf 0 黑色
[31m setaf 1 红色
[32m setaf 2 绿色
[33m setaf 3 黄色
[34m setaf 4 蓝色
[35m setaf 5 样红色
[36m setaf 6 青蓝色
[37m setaf 7 白色
[39m setaf 9 默认
其它
bracketed paste
当复制字符串到终端时可能会出现 \e[200~XXX\e[201~
类似的信息,其中 XXX
是复制的内容,这实际上就是所谓的 bracketed paste mode
用于区分是复制过来还是单纯直接输出,只是有些终端可能不支持,就会直接输出。