使用 tput 创建屏幕输出

发布于 2023-02-06 00:12:13 字数 3003 浏览 83 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

拒绝两难

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文