当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-18 17:05:15 190观看
导读为何选择文字用户界面(TUI)?许多人每日都在使用终端,因此,文字用户界面Text User Interface(TUI)逐渐显示出其价值。它能减少用户输入命令时的误差,让终端操作更高效,提高生产力。以我的个人使用情况为例:我每日会通过家用电脑

kwX28资讯网——每日最新资讯28at.com

kwX28资讯网——每日最新资讯28at.com

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

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

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

于是,我创建了下面这个 Bash 函数,从而有所改进:kwX28资讯网——每日最新资讯28at.com

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}

但后来,我发现自己还是频繁地执行下面这条命令(在一行中):kwX28资讯网——每日最新资讯28at.com

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

这太烦了。更糟糕的是,我的密码被明文存储在我的电脑上(我虽然使用了加密驱动器,但这点依然令人不安)。kwX28资讯网——每日最新资讯28at.com

因此,我决定投入一些时间,编写一个实用的脚本,从而更好地满足我的基本需求。kwX28资讯网——每日最新资讯28at.com

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

实际上,要连接到远程桌面,你只需提供少量信息。这些信息需要进行结构化处理,所以一个简单的 JSON 文件就能够满足要求:kwX28资讯网——每日最新资讯28at.com

{"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。下面我要向你展示如何利用它来提取机器列表:kwX28资讯网——每日最新资讯28at.com

/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,试用你的表达式,然后在你的脚本中使用这些表达式。kwX28资讯网——每日最新资讯28at.com

既然已经准备好了连接远程计算机所需的所有信息,那现在就让我们来创建一个美观实用的 TUI 吧。kwX28资讯网——每日最新资讯28at.com

Dialog 的帮助

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

比如,我可以创建一个包含我喜欢的编程语言的简单的复选框列表,且默认选择 Python:kwX28资讯网——每日最新资讯28at.com

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

kwX28资讯网——每日最新资讯28at.com

我们通过这条命令向 dialog 下达了几个指令:kwX28资讯网——每日最新资讯28at.com

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

惊人的是,仅仅一行代码,就带来了简洁直观和视觉友好的选择列表。kwX28资讯网——每日最新资讯28at.com

关于 dialog 的详细文档,你可以在 这里 阅读。kwX28资讯网——每日最新资讯28at.com

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

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

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

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-29283-0.html使用 dialog 和 jq 在 Linux 上编写高效终端 TUI

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 过去 10 年消费全部免单,美团外卖感谢首位用户隋蕊

下一篇: OPPO Reno11 系列影像配置、新系统全面曝光,打造超级标准版!

标签:
  • 热门焦点
Top
Baidu
map