一个古老的终端显示控制命令-tput命令|帮你解决中英文混合时终端列对齐输出问题

终端显示控制对于写一个 终端脚本 是非常有用的,在没有图形界面时Unix和类Unix系统用户都是在Terminal控制终端下工作的。虽然Linux操作系统的图形界面出现淡化了终端显示控制,但终端控制功能依旧是每个命令行用户不可或缺的一部分。只是我们不知道在使用它而已。

例如控制突出显示、光标位置以及对于 UTF-8 长度大于1个字节的文本显示( 中文、特殊符号)等。

tput这个命令可能很多朋友没有使用过,1980年代它就已经跟着unix存在了,之后不断发展到了今天。与之类似的命令有:

  • reset # 重置光标为第一行第一列,但不清空历史输出信息。
  • clear # 重置光标为第一行第一列,并清空终端所有输出。

本文带你了解一下tput命令的功能及使用方法。

命令用法

tput命令的使用语法:

       tput [-Ttype] capname [parameters]tput [-Ttype] [-x] cleartput [-Ttype] inittput [-Ttype] resettput [-Ttype] longnametput -S  <<tput -V

从简单的开始介绍:

$  tput -V   # 查看使用ncurse库的版本
ncurses 6.3.20211021# 如果terminfo文件存在,针对当前终端类型("-T"或TERM变量)的定义也存在,输出终端类型的完整名字。
$ tput  -T xterm longname
xterm terminal emulator (X Window System)
$ tput  -T linux longname
Linux console$ tput clear  # 清屏,将当前终端屏幕内容清空(再也找不到之前执行命令显示内容了),光标在第一行第一列位置。
$ tput reset  # 跟 clear类似,但历史输出信息并不清除(clear 是清除历史内容的)。
$ tput init     # 重新初始化终端信息,但不清屏幕内容,重置光标在下一行第一列。$ env |grep TERM
COLORTERM=truecolor
TERM=xterm-256color# 使用“-S”选项,一次提供多个属性。首先清屏,把光标移至10行10列,设置背景色彩(蓝)。
$ tput -S <<END  ;  echo  "hello world"
clear
cup 10 10
setb 1
END

其中的参数:

  • -T type : 指定终端类型, 默认使用环境变量 $TERM 的终端类型,通常不用设置这个参数,支持的终端类型可以在Terminal窗口设置找到。
  • -S << :参数用于通过多行输入属性来控制终端显示。

终端显示控制用法

以上几个简单的命令描述完后,接下来我们在了解他的强大终端显示控制用法。

tput [-T type] capname [parameters]
  • capname是terminfo文件中定义的一系列复杂的终端功能属性之一。例如,cols表示终端的列数,lines表示终端屏幕的行数,clear表示清屏,cup表示光标移动位置,is1is2is3表示初始化串,if表示初始化文件,iprog表示初始化程序等,完整的说明见terminfo (5)手册页。parms是终端功能属性capname的参数。例如,cup属性需要提供行与列两个参数。

光标属性相关

tput clear      # 清除屏幕
tput sc           # 记录当前光标位置
tput rc           # 恢复光标到最后保存位置
tput civis      # 光标不可见
tput cnorm      # 光标可见
tput cup x y    # 光标按设定坐标点移动

文本属性相关

tput blink      # 文本闪烁
tput bold       # 文本加粗
tput el         # 清除到行尾
tput smso       # 启动突出模式
tput rmso       # 停止突出模式
tput smul       # 下划线模式
tput rmul       # 取消下划线模式
tput sgr0       # 恢复默认终端
tput rev        # 反相终端

改变文本显示背景、前景颜色:

tput setb 颜色代号
tput setf 颜色代号

颜色代号:

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

接下来分享一些实际使用的示例

示例:突出显示文本信息

下面是通过smso控制突出显示 "Name: "信息

bold=`tput smso`
offbold=`tput rmso`
echo "${bold}Name: ${offbold} ¥c" 

下面示例通过capname为sgr控制突显和下划线:

tput sgr x ytput sgr 0 1     turn off standout; turn on underline
tput sgr 0 0     turn off standout; turn off underline
tput sgr 1 1     turn on standout; turn on underline
tput sgr 1 0     turn on standout; turn off underlineecho "`tput sgr 1 1`Name: `tput sgr 0 0`  ¥c"
echo "`tput sgr 0 1`Name: `tput sgr 0 0`  ¥c"
echo "`tput sgr 0 1`Name: `tput sgr0`  ¥c"

示例:中英文输出控制列宽度

中英文混合显示测试示例(中文字符UTF-8存储长度为3,但Terminal终端显示占用长度为2, 因此实际终端会出现对不齐问题)

strings=("这是一个Test文本""This is a test""This is 一个 很长很长的Test Test Test Test"
)
LEN="30"
line
printf '\n%s\n' 'normal:'
for str in "${strings[@]}"; doprintf "|%-20s|\n" "$str"
doneprintf '\n%s\n' 'tput:'
for str in "${strings[@]}"; doprintf "|%-${LEN}.${LEN}s" "$str" ; tput hpa $LEN ; printf "|\n"
done

执行后效果如下(由于粘贴到文本中跟终端显示情况不一致,只能贴图了):

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode:129. 求根节点到叶节点数字之和 | 二叉树 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

记录汇川:水塔指令解释-ST

可以通过帮助查看指令手册 PLC的IO地址映射-两种方法 第一种&#xff1a; 新建一个全局变量表&#xff0c;按照如图所示建立IO地址 第二种&#xff1a; 直接如图所示位置定义名字 注意&#xff1a;IW和QB这两个前面一个有蓝色M一个没有。 蓝色的M表示模块发生变化的时候地址不会…

【S32K 进阶之旅】 NXP S32K3 以太网 RMII 接口调试(1)

前言 大联大世平集团推出了一款基于 NXP 车规级 MCU S32K344 的开发板——花名“Cavalry”&#xff0c;它使用 BGA257 封装的 32 位 ArmCortex-M7 S32K344 作为主控芯片&#xff0c;在69.6*130mm 的小体积开发板上搭载了 SBC 电源管理芯片、CAN 收发器、LIN 收发器、FLASH 存储…

低噪声,高增益的音频信号处理电路芯片选型分析

随着智能手机、汽车音频、AI智能音箱&#xff0c;智能家居、家庭影院、平板电脑、笔记本电脑等智能设备的普及&#xff1b;数字音频功放芯片的应用也越来越广泛&#xff1b;同时对音频信号处理的芯片的性能要求越来越高&#xff1b;以下几款就是常用热门音频信号处理电路芯片分…

NVM NodeJs版本管理 通关宝典

NVM NodeJs版本管理 通关宝典&#x1f3f9; 文章目录 NVM NodeJs版本管理 通关宝典&#x1f3f9;一、NVM是什么二、开始使用NVM三、NVM 命令速查四、手动安装特定Node版本(Windows)&#x1f644;4.1 NVM for windows 运行机制4.2 手动安装流程 五、切换 NVM 下载镜像源六、常见…

21. Mysql 事件或定时任务,解放双手,轻松实现自动化

文章目录 概念常见操作事件调度器操作查看事件创建事件删除事件启动与关闭事件 精选示例构造实时数据定时统计数据 总结参考资料 概念 Mysql 事件是一种在特定时间点自动执行的数据库操作&#xff0c;也可以称呼为定时任务&#xff0c;它可以自动执行更新数据、插入数据、删除…

x-cmd pkg | doggo - 现代化的 DNS 客户端

目录 简介首次用户快速实验指南功能特点类似工具与竞品进一步探索 简介 doggo 是一个由 Karan Sharma 于 2020 年使用 Go 语言开发的 DNS 客户端。它类似于 dig 命令&#xff0c;但旨在以现代化、简洁和可读的格式输出 DNS 查询结果。 首次用户快速实验指南 使用 x doggo 即可…

1.4 day4 IO进程线程

使用两个子进程进行文件拷贝&#xff0c;父进程进行资源回收 #include <myhead.h> int main(int argc, const char *argv[]) {//创建一个文件描述符并以只读的方式打开int fd-1;if((fdopen("./test.bmp",O_RDONLY))-1){perror("open error");return…

IDAPython详细版(二)

六&#xff1a;操作数 可以使用idc.get_openrand_typed(ea,n)得到操作数的类型。ea是地址&#xff0c;n是索引 这里有8种不同类型的操作数类 0_void 如果一个指令木有任何操作数它将返回0 0_reg 如果一个操作数是一个普通的寄存器将返回此类型。这个值在内部表示为1. o_mem …

java: 写入数据到HBase

一、添加依赖 <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.hbase</groupId><art…

Prometheus-Alertmanage钉钉实现告警

获取钉钉的webhook地址 1、注册企业钉钉 a、注册企业钉钉 浏览器打开钉钉注册页面 填入手机号码&#xff0c;填入获取到的验证码&#xff0c;点注册 填入企业资料并注册 注册成功后&#xff0c;扫描二维码下载钉钉&#xff0c;如下图&#xff1a; b、添加机器人 管理后台 因…

Modbus RTU Learn

一、传输方式 采用主从应答方式进行 帧格式 功能码对应寄存器 演示01功能码 返回数据 0F 转换成二进制 02功能码 0F 转换成二进制 03功能码 读两个寄存器 04功能码 返回数据&#xff0c;读两个寄存器 05功能码 06功能码 10功能码 响应报文

在centos上安装WordPress 及创建配置文件无反应的解决方案

一、安装Apache服务 1.直接在命令行中输入以下命令即可,顺便安装编译组件&#xff1a; yum install -y httpd yum install -y httpd-devel2.启动Apache服务和设置Apache自启&#xff1a; 1 systemctl start httpd 2 systemctl enable httpd 3.添加一个测试页面&#xff0c;…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

5款实用的Win10软件,提高工作效率

​ 大家好&#xff0c;今天我来给大家推荐5款实用的Win10软件&#xff0c;它们可以帮助你提高工作效率&#xff0c;优化系统性能。 1.视频剪辑——DaVinciResolve ​ DaVinciResolve是一款集视频剪辑、调色、特效和音频后期制作于一体的专业软件。它拥有强大的图像处理技术&a…

Minitab 18安装包下载及安装教程

Minitab 18下载链接&#xff1a;https://docs.qq.com/doc/DUnRSaml6UHRpWFdn 1.选中下载好的安装包&#xff0c;鼠标右键解压到”Minitab 18“文件夹 2.选中”f4-mini181-setup.exe“&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“确定” 4.点击“下一步” 5.勾选我接…

android 分享文件

1.在AndroidManifest.xml 中配置 FileProvider <providerandroid:name"android.support.v4.content.FileProvider"android:authorities"com.example.caliv.ffyy.fileProvider"android:exported"false"android:grantUriPermissions"true…

宝宝的听力发育进程

小宝宝听力发育进程&#xff1a; 在母亲怀孕中晚期&#xff0c;小宝宝就有了听觉&#xff1a;6个月胎儿的听力已经和成年人相当了。 ◆ 出生0-7天的小宝宝会随声音变化产生不同反应&#xff0c;当在宝宝耳边拍巴掌或摇摇铃&#xff0c;宝宝可能会有惊跳反应&#xff0c;或吓哭…

查询json数组

步骤一&#xff1a;创建表格 首先&#xff0c;我们需要创建一个表格来存储包含JSON对象数组的数据。可以使用以下代码创建一个名为 my_table 的表格&#xff1a; CREATE TABLE my_table (id INT PRIMARY KEY AUTO_INCREMENT,json_data JSON ); 上述代码创建了一个包含两个列的…

SCADE—产品级安全关键系统的MBD开发套件

产品概述 随着新能源三电、智能驾驶等新技术的应用&#xff0c;汽车中衍生出很多安全关键零部件&#xff0c;如BMS、VCU、MCU、ADAS等&#xff0c;相应的软件在汽车中的比重越来越大&#xff0c;并且安全性、可靠性要求也越来越高。ANSYS主要针对安全关键零部件的嵌入式产品级软…