22.rust命令行工具开发实践

一、前言

rust语言目前应用最广的方向之一就是命令行了,因为rust语言代码简练、内存安全、效率很高,用来开发命令行工具是非常合适的。

目前已经有相当多的命令行工具都在采用rust重写了。

二、认识命令行

命令行程序与图形化程序相对,简写分别为:CLIGUI,这两个单词相信大家以后会经常看到的,其指代的分别是这两者,官方点的称谓分别为:命令行接口(command-line interface)、图形用户接口(Graphical User Interface)。

图形化程序应该是大家最早认识到的,比如QQ、微信等应用程序都是图形化界面。

而命令行则比较少见了,但只要你写过基本的C/C++程序、乃至本系列文章中的rust程序,其实也算是认识了,因为我们目前写的这些程序也都算是命令行程序。

唯一的不同之处在于,我们这些程序是点击即运行,而无法像那些看起来很专业的工具还有一大堆说明、参数等等。

而这就是本文的核心,带大家快速开发一个属于自己的命令行工具。

一个命令行工具说简单也简单,但说复杂有时也挺复杂的,比如就拿大家最熟悉的Windows系统为例,打开其终端,输入命令dir,它就会列出当前目录下所有的文件:

image-20231213121020485

这是它的默认行为,但其实它是可以带选项的,windows系统自带的命令选项是一/开头,但主流的命令行工具都是以-开头,这里先以windows系统的dir命令为例:

image-20231213121219550

window系统自带的命令都有一个?的选项,它会列举出该命令的使用文档,比如上图中就可以看到,除了?外,还有相当多/开头的选项,通过传入不同的选项就可以启用这个命令行工具的不同功能。

只要是在[]中的选项,那就都是可选的,也就是可以不填。

但有些命令不行,比如创建目录的mkdir命令,它需要“参数”,注意这里的用词,不再是“选项”了,而是“参数”。

参数便是不以/-开头的数据:

image-20231213121842579

比如上图中,直接使用mkdir命令就不行了,通过查看其帮助文档,发现其命令后面跟着一个path,它没有用/开头,说明它是一个参数,并且它没有被[]包括起来,说明它是必须要传入的数据。

虽然命令行工具可以有很大的自由度,你怎么搞都行,但如果想要让自己的命令行工具能够被广泛应用,那最好还是参考这些大家都统一遵守的原则,这样就可以为用户减少一些学习成本。

通过以上的观察我们可以发现,一个命令行工具一般是需要包含以下三部分的:

  1. 选项:通过/或者-开头,用于启动命令行工具的不同功能
  2. 参数:一般直接跟着后面
  3. 帮助文档:一般通过固有的参数/?-h--help来输入当前工具的帮助文档。

不同部分都是直接用空格隔开的,但如果有些参数内部存在空格,比如路径,那你就需要用引号""将该参数包裹起来。

而选项内又有所区别,分为短选项与长选项,比如前面提到的-h--help一般就是实现同一个功能的两个选项。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux