当我们在开发 FinSH 时,我们了解到,在编写命令行应用程序之前,你需要熟悉 GNU 命令行标准。这个标准实践的框架有助于给界面带入熟悉感,这有助于开发人员在使用时感到舒适和高效。

一个完整的 GNU 命令主要由四个部分组成。

命令名(可执行文件):命令行程序的名称;

子命令:命令程序的子函数名称。

选项:子命令函数的配置选项。

参数:子命令函数配置选项的相应参数。

你可以在任何命令中看到这一点。以 Git 为例:

gitreset--hard HEAD~1

这一点可以分解为:

可执行的命令是 git,子命令是 reset,使用的选项是 --head,参数是 HEAD~1。

再举个例子:

systemctl enable --now firewalld

可执行的命令是 systemctl,子命令是 enable,选项是 --now,参数是 firewalld。

想象一下,你想用 RT-Thread 编写一个符合 GNU 标准的命令行程序。FinSH 拥有你所需要的一切,并且会按照预期运行你的代码。更棒的是,你可以依靠这种合规性,让你可以自信地移植你最喜欢的 Linux 程序。

编写一个优雅的命令行程序

下面是一个 RT-Thread 运行命令的例子,RT-Thread 开发人员每天都在使用这个命令:

usage:env.py package[-h][--force-update][--update][--list][--wizard]

                      [--upgrade][--printenv]

 

optional arguments:

  -h,--help      show this help message andexit

  --force-update  force update and clean packages, install or remove the

                  packages by your settings in menuconfig

  --update        update packages, install or remove the packages by your

                  settings in menuconfig

  --list          list target packages

  --wizard        create a newpackagewith wizard

  --upgrade       upgrade local packages listand ENV scripts fromgit repo

  --printenv      print environmental variables to check

正如你所看到的那样,它看起来很熟悉,行为就像你可能已经在 Linux 或 BSD 上运行的大多数 POSIX 应用程序一样。当使用不正确或不充分的语法时,它会提供帮助,它支持长选项和短选项。这种通用的用户界面对于任何使用过 Unix 终端的人来说都是熟悉的。

选项种类

选项的种类很多,按长短可分为两大类。

短选项:由一个连字符加一个字母组成,如 pkgs -h 中的 -h 选项。

长选项:由两个连字符加上单词或字母组成,例如,scons- --target-mdk5 中的 --target 选项。

你可以把这些选项分为三类,由它们是否有参数来决定。

没有参数:该选项后面不能有参数。

参数必选:选项后面必须有参数。

参数可选:选项后可以有参数,但不是必需的。

正如你对大多数 Linux 命令的期望,FinSH 的选项解析非常灵活。它可以根据空格或等号作为定界符来区分一个选项和一个参数,或者仅仅通过提取选项本身并假设后面的内容是参数(换句话说,完全没有定界符)。

dawei

【声明】:达州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。