您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

使用 dialog 和 jq 在 Linux 上编写高效终端 TUI

时间:2023-11-19 15:12:15  来源:微信公众号  作者:Linux中国

为何选择文字用户界面(TUI)?

许多人每日都在使用终端,因此,文字用户界面Text User Interface(TUI)逐渐显示出其价值。它能减少用户输入命令时的误差,让终端操作更高效,提高生产力。

以我的个人使用情况为例:我每日会通过家用电脑远程连接到我使用 linux 系统的实体 PC。所有的远程网络连接都通过私有 VPN 加密保护。然而,当我需要频繁重复输入命令进行连接时,这种经历实在令人烦躁。

于是,我创建了下面这个 Bash 函数,从而有所改进:

export REMOTE_RDP_USER="myremoteuser"
function remote_machine() {
  /usr/bin/xfreerdp /cert-ignore /sound:sys:alsa /f /u:$REMOTE_RDP_USER /v:$1 /p:$2
}

但后来,我发现自己还是频繁地执行下面这条命令(在一行中):

remote_pass=(/bin/cat/.mypassfile) remote_machine $remote_machine $remote_pass

这太烦了。更糟糕的是,我的密码被明文存储在我的电脑上(我虽然使用了加密驱动器,但这点依然令人不安)。

因此,我决定投入一些时间,编写一个实用的脚本,从而更好地满足我的基本需求。

我需要哪些信息才能连接到远程桌面?

实际上,要连接到远程桌面,你只需提供少量信息。这些信息需要进行结构化处理,所以一个简单的 JSON 文件就能够满足要求:

{"machines": [
  {
  "name": "machine1.domAIn.com",
  "description": "Personal-PC"
  },
  {
  "name": "machine2.domain.com",
  "description": "Virtual-Machine"
  }
  ],
"remote_user": "MYUSER@DOMAIN",
"title" : "MY COMPANY RDP connection"
}

尽管在各种配置文件格式中,JSON 并非最佳选择(例如,它不支持注解),但是 Linux 提供了许多工具通过命令行方式解析 JSON 内容。其中,特别值得一提的工具就是 jq。下面我要向你展示如何利用它来提取机器列表:

/usr/bin/jq --compact-output --raw-output '.machines[]| .name' 
  $HOME/.config/scripts/kodegeek_rdp.json) 
  "machine1.domain.com" "machine2.domain.com"

jq 的文档可以在 这里 找到。另外,你也可以直接将你的 JSON 文件复制粘贴到 jq play,试用你的表达式,然后在你的脚本中使用这些表达式。

既然已经准备好了连接远程计算机所需的所有信息,那现在就让我们来创建一个美观实用的 TUI 吧。

Dialog 的帮助

Dialog 是那些你可能希望早些认识的、被低评估的 Linux 工具之一。你可以利用它构建出一个井然有序、简介易懂,并且完美适用于你终端的用户界面。

比如,我可以创建一个包含我喜欢的编程语言的简单的复选框列表,且默认选择 Python/ target=_blank class=infotextkey>Python:

dialog --clear --checklist "Favorite programming languages:" 10 30 7
  1 Python on 2 JAVA off 3 Bash off 4 Perl off 5 Ruby off

使用 dialog 和 jq 在 Linux 上编写高效终端 TUI

我们通过这条命令向 dialog 下达了几个指令:

  • 清除屏幕(所有选项都以 -- 开头)
  • 创建一个带有标题的复选框(第一个位置参数)
  • 决定窗口尺寸(高度、宽度和列表高度,共 3 个参数)
  • 列表中的每条选项都由一个标签和一个值组成。

惊人的是,仅仅一行代码,就带来了简洁直观和视觉友好的选择列表。

关于 dialog 的详细文档,你可以在 这里 阅读。

整合所有元素:使用 Dialog 和 JQ 编写 TUI

我编写了一个 TUI,它使用 jq 从我的 JSON 文件中提取配置详细信息,并且使用 dialog 来组织流程。每次运行,我都会要求输入密码,并将其保存在一个临时文件中,脚本使用后便会删除这个临时文件。

这个脚本非常基础,但它更安全,也使我能够专注于更重要的任务



Tags:终端   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
终端设备通信网络安全防护方案
终端设备的网络安全是一个综合性问题,需要用户、组织和厂商共同努力,采取一系列的措施来保护终端设备的安全。终端设备网络安全防护方案主要包括以下几个方面:1. 强化用户身份...【详细内容】
2024-01-01  Search: 终端  点击:(51)  评论:(0)  加入收藏
6G来了,2G、3G终端怎么办?官方解答→
2023全球6G发展大会近日在重庆举行。据工业和信息化部有关负责人介绍,我国将加快推进6G技术研发与创新,2030年左右实现商用。到底什么是6G?它又将如何改变我们的生活?6G是什么?速...【详细内容】
2023-12-08  Search: 终端  点击:(51)  评论:(0)  加入收藏
只会在终端使用Python运行代码?这些进阶用法了解了解
大部分同学在终端使用Python可能只是简单的执行代码,但其实结合一些Python内置模块或第三方库可以实现更高级且便捷的用法,一起看看吧!代码Benchmark测试首先简单写个斐波那契...【详细内容】
2023-11-29  Search: 终端  点击:(232)  评论:(0)  加入收藏
广电总局:有线电视终端系统默认设置应为“开机进入全屏直播”
记者27日从国家广播电视总局获悉,广电总局日前发布了《有线电视业务技术要求》等三项广播电视和网络视听行业标准的通知,要求有线电视终端应提供“开机进入全屏直播”和“开机...【详细内容】
2023-11-28  Search: 终端  点击:(104)  评论:(0)  加入收藏
光纤终端盒参数
光纤终端盒是一种用于连接光纤的设备,通常用于将一根光纤连接到多个设备上,例如将一根光纤连接到多个光纤终端、光纤交换机、光纤收发器等设备上。光纤终端盒通常包含以下参数...【详细内容】
2023-11-24  Search: 终端  点击:(154)  评论:(0)  加入收藏
使用 dialog 和 jq 在 Linux 上编写高效终端 TUI
为何选择文字用户界面(TUI)?许多人每日都在使用终端,因此,文字用户界面Text User Interface(TUI)逐渐显示出其价值。它能减少用户输入命令时的误差,让终端操作更高效,提高生产力。以...【详细内容】
2023-11-19  Search: 终端  点击:(117)  评论:(0)  加入收藏
大模型落地终端令AI PC火热,会否打破PC市场既有格局?
近日多家产业链厂商相继宣布对AI PC的布局进展,显示出AI大模型正加速落地在硬件中,可望为人类生活带来新助力。其中以微软将旗下软件连接大模型能力作为代表,加速优化了办公软...【详细内容】
2023-10-31  Search: 终端  点击:(161)  评论:(0)  加入收藏
高通安蒙独家透露:终端AI有何意义,如何压倒苹果英特尔
新浪科技 郑峻发自美国夏威夷高通骁龙峰会首日,主题演讲结束之后,高通CEO安蒙走下舞台,几乎没有停歇就接受了我的专访。他的工作日程排得很满,甚至次日就要返回高通总部圣地亚哥...【详细内容】
2023-10-27  Search: 终端  点击:(107)  评论:(0)  加入收藏
10个非常有趣的Linux终端命令
介绍10个非常有趣的Linux终端命令。1. slsl命令是一个有趣的火车模拟器,它会在终端中显示一列经过的火车。这个命令常常被用来开玩笑,因为它看起来像是一个误输入的ls命令。安...【详细内容】
2023-08-25  Search: 终端  点击:(270)  评论:(0)  加入收藏
让Linux容器变身SSH登录终端,轻松远程管理你的服务器
引言大家好,我是一位不断学习Linux和Python技术的小伙伴,今天我将分享一个有趣且实用的技巧,即如何在Linux服务器上安装的Docker容器中启用SSH服务,使得这个容器能够通过SSH方式...【详细内容】
2023-08-20  Search: 终端  点击:(176)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(5)  评论:(0)  加入收藏
站内最新
站内热门
站内头条