CLI
名词解释
全称为Command Line Interface,也就是大家俗称的命令行
是一种相当古早之前就开始流行的使用应用的方式,纯文本驱动,输入和应用程序约定好的字符即可使用
举例说明
cli有很多著名的例子,比如linux系统内置的一些命令
ls, cat, cd等等都是,符合人们对于cli应用的刻板影响

这种方式十分方便,输入字符即可使用应用,但是想吃透这种方式也显得比较困难
公认一般有两种方式查看cli程序的完整使用方式
一种是--help选项

但是也有很多应用没有--help选项,就比如ls

所以这种方式也不是万能的
另一种比较公认的方法是man工具

这种方式的原理其实是读取/usr/share/man下面的man文件
这种方式对于linux原生的命令一般是有用的,因为他们一般都提供man文件,对于一些第三方程序就不一定

所以如果想要cli程序的完整使用方法,上面两种方式都尝试一下,如果还是不行,就只能去查找对应的官网有没有document
所以这些不方便的特点都会让使用者觉得自己不能掌握这个软件,即使对于经常使用命令行的老手,也难以熟悉每个软件的每个选项,用到的时候才会去查手册
相关技术
cli感觉没有相关的技术,值得说的应该就是关于它的一些bash编程变量和一些开发尝试
一般来说,在bash编程中$1,$2分别代表传入脚本中的第一个和第二个参数,
其他编程语言对于传入的参数都会有比较人性化的定义。
但是基于这种比较简陋简单的特点,cli对于开发产品原型比较友好
比如最近我在开发一个前后端分离的软件,后端逻辑使用cli先验证一些逻辑,对于我快速开发有一些推力
TUI
全称是Text-based User Interface
这是一个介于gui和cli中间的概念,有很多朋友会将这个概念和cli傻傻分不清,这也是我想写这篇博客的原因
tui更靠近gui,因为它的核心是在终端绘制一些图形,编程的时候强调绘制的代码,而不强调后端的逻辑代码,完全可以在代码中调用cli逻辑作为后端
举例说明
编辑器领域有一个著名的TUI例子,vim/neovim流派。

还有一个也很使用的TUI应用,htop

这些应用的特点很明显,就是在终端中绘制UI,尽管这些UI十分简单甚至简陋,但是相比于CLI大大提升了程序的易用性,并且TUI实际上是支持鼠标的,所以在使用性上不怎么输于后文会将的GUI
对于vim和著名的cli编辑器sed,很明显,vim在易用性上面薄纱了
同时vim中也有sed的影子,比如在command模式下使用%s/替换字符
相关技术
在早些年,TUI一般就只能显示文字,色块,线条等等简单的元素,无法显示图片视频等需要图形化服务的资源,即使想要强行显示,也只能使用一些像素色块来模拟显示,简直就在看马赛克一样
但是开源社区总是有对于TUI有些执着的人,kitty的开发者就实现了著名的TGP协议来支持显示图片,iterm2也有自己的imgcat,但是没有前者流行

并且对于视频流,著名的mpv软件也能够支持-vo=kitty选项

因此我个人认为kitty的开发者们对于tui的开发做出了巨大的贡献
引领了一系列tui框架对于图片视频的支持
不同的编程语言有不同的TUI框架
比如说python的textual,rust的ratatui
GUI
全称是Graphical User Interface
到了GUI时代,展现形式就丰富多样了很多,图片视频,卡片各种各样的效果
只有你想不到,基本没有GUI展示不了的画面在渲染画面方面,GUI毫无疑问薄纱前面两位
举例说明
其实我不举例子你们应该也知道有哪些东西,但为了我阐述的完整性,我还是举两个
第一个我想提的是Chromoium浏览器,虽然它最出名的是内核,但是GUI也很经典(这里我直接拿chrome的截图来展示一下)

第二个我想提的是各种各样的desktop environment,最出名的当然是windows的UI

这些没什么好讲的,大家都十分熟悉,也比前两个易用普及多了
相关技术
实现GUI的技术相当多
最经典的html,css,javascript三板斧
各种前端框架,QT,React,streamlit
本身他们可以调用的服务也是多如牛毛,能实现这么好的效果也不是什么惊讶的事情
总结
本文是我想阐述TUI而衍生出来的对于三个相同领域的概念的说明
顺便推荐一下我的一个TUI项目tui-qq-py,是一个tui版本的qq,目前已经是0.0.1版本了,可以体验一下