3

使用tput创建屏幕输出

 3 years ago
source link: https://www.lujun9972.win/blog/2016/11/30/%E4%BD%BF%E7%94%A8tput%E5%88%9B%E5%BB%BA%E5%B1%8F%E5%B9%95%E8%BE%93%E5%87%BA/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用tput创建屏幕输出

Table of Contents

1 tput与terminfo

tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作。通过使用 tput,您可以更改几项终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。

UNIX 系统上的 terminfo 数据库用于定义终端和打印机的属性及功能,包括各设备(例如,终端和打印机)的行数和列数以及要发送至该设备的文本的属性。 UNIX 中的几个常用程序都依赖 terminfo 数据库提供这些属性以及许多其他内容,其中包括 vi 和 emacs 编辑器以及 curses 和 man 程序。

2 tput常用法

tput默认通过$TERM的值来指示终端类型,但我们也可以通过 -T $Type 来指定终端类型。不过一般来说都没有这个必要。

下面的用法中都上略对-T参数的说。

tput capname [parameters]这是tput最常用的方式,具体用法见下一章. tput init初始化终端,在使用tput前一般会先执行该命令 tput reset重置终端属性为默认值 tput clear tput -S从stdin中读取指令,可以支持一次性设置多个指令,但必须保证一个指令一行.

3 tput的使用

tput一般用于作三件事情: 设置终端属性,获取终端属性以及判断终端是否支持某项能力.

但请记住,某些系统(比如AIX)中的tput并不支持设置颜色!

另外,在使用tput的输出值时,请一定先保证tput的返回值为0!

3.1 设置终端属性

tput主要是通过输出控制码字符串来实现一些特殊终端效果的.

bel blink进入闪烁模式 bold进入粗体模式 civis cnorm取消隐藏鼠标 clear cup $r $c将光标移动到第$r行,第$c列 el清除到行尾 ell清除到行首 smso进入凸出模式 rmso退出凸出模式 smul进入下划线模式 rmul退出下划线模式 sc保存光标当前位置 rc回复光标最后保存的位置 rev进入反转模式 sgr0回复正常显示 setf $n / setb $n

设置前景色/背景色.$n为在terminfo数据库中的颜色数值,一般对应关系为:

数值 颜色 0 黑色 1 蓝色 2 绿色 3 青色 4 红色 5 洋红色 6 黄色 7 白色

setaf $n / setab $n使用ANSI的转义字符来设置前景色/背景色.

下面是一个例子

#!/bin/bash

BOLD=$(tput bold)
REV=$(tput rev)
NORMAL=$(tput sgr0)
CURSOR_OFF=$(tput civis)
CURSOR_ON=$(tput cnorm)

tput init

tput clear
echo $CURSOR_OFF
tput cup 2 15
echo -e "${BOLD}粗体效果{NORMAL}\n"
echo  "${REV}反转效果${NORMAL}"
echo $CURSOR_ON

3.2 获取终端属性

tput会输出一个数字,表示该属性的值.

cols获取终端一行有多少列字符 lines获取终端一列有多少行字符 it终端的TAB相当于几个空格

下面是一个例子

echo "The terminal is $(tput cols) x $(tput lines)"
The terminal is 80 x 24

3.3 判断终端是否存在某项能力

tput会通过返回值来表示是否具有这项能力(0表示true,1表示false).

chts光标是否不可见 hs终端是否具有状态行

下面是一个例子:

if tput hs;then
    echo "your terminal has a status lne"
else
    echo "your terminal has NO status line"
fi
your terminal has NO status line

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK