953

头条 热门 重磅原创 PPP 地方 教育 图片新闻 政府采购 权威公告

首页 > 产业  > 文章详情页

制作一款CLI工具是件有成就感的事

之前在朋友圈求助过。如何快速制作一个CLI工具是命令行工具,比如echo。大圈神们贡献了很多方法。我先做个总结。比如Java语言的SpringShell,可以和...
制作一款CLI工具是件有成就感的事

之前在朋友圈求助过。如何快速制作一个CLI工具是命令行工具,比如echo。

大圈神们贡献了很多方法。我先做个总结。

比如Java语言的Spring Shell,可以和SpringBoot一起做一个命令行工具,比如下面的写法。

shellcomponentpublicsshcommandshellmethodpublicvoidssh(shell option(value = "-s ")stringghost)system . out . println(host);

您可以使用-s参数支持ssh命令。

shell:ssh-s 192 . 168 . 0 . 3192 . 168 . 0 . 3

用java给自己做这么一个小工具集,非常方便。当然,如果你不想用Spring,也有JCommander之类的工具,不依赖Spring套件,但是写出来会很难看。

dpdk

python的点击

C++ boost

锈斑

nodejs

通用CLI包

urfave/cli

xterm.js

cpp的增强

不过没有提到C语言,倒是有读者提到了getopt系列函数。这是什么?

不管这个函数是什么,你知道你常用的echo,cp,mv这些命令是谁提供的吗?

这些都属于coreutils工具类,比如cp - version,具体版本信息可以看。

由于这些CLI工具类都是coreutils中的代码,所以我们来看看这里的实现,它必须是优雅的。

打开coreutils的源代码,找到任意命令,比如basename.c找到它的main方法。如您所见,getopt_long解析的是命令行参数。

说到实现的优雅,我们和coreutils里的实现是一样的,总没有错。

但是如何使用getopt_long呢?伙计,我们看的时候可以看到非常详细的介绍。下面还有一个特别简单的演示,可以直接编译运行。

通过对比发现,这个demo的大体结构和coreutils中的一样。两者都是在while循环中连续调用getopt_long函数来解析-or-参数,然后通过开关判断返回值C的值来执行不同的运算。

同时,将long_options-parameter列表放在一个数组中,用required_argument表示需要的参数,用no_argument表示没有参数。

这时,我有了一个想法。如果我自己实现一套coreutils,不仅可以学习如何用C语言制作一个优雅的CLI工具,还可以对常见的shell命令有深入的了解。同时,我们可以将这些命令转换为具有自己的特点,并为将来添加自己的新命令奠定基础。

同时coreutils中很多命令的底层也需要调用Linux系统库,我们可以多了解一些系统库函数。

真多!操!

coreutils中有一个特别有趣且简单的命令。是的,如果你在Linux命令行输入yes,回车,你会发现它在命令行连续输出y,速度非常快。就是这个效果。

能不能自己实现一个,修改一下,让它输出行号,控制输出时间间隔,没那么快?

只要这样做,一个dbf-yes工具就做好了。

它可以支持-n参数来指示输出行号,-s参数来指示时间间隔秒数,最后还有一个参数hehe来指示要输出什么字符。

感觉这种学习方法还是很好的,涉及到很多知识点,很有成就感。我在coreutils中实现了所有的工具,就像一个增加自己特色的突破口。

【声明】 以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。

【特别提醒】:如您不希望作品出现在本站,可联系我们要求撤下您的作品。邮箱:boss_11@teag.net

中国财经新闻网客户端推荐下载

个股排行
排名 名称 现价 涨跌幅
排名 名称 现价 涨跌幅
60秒后刷新
刷新
A股指数

上证指数

深证成指

创业板

--

-- -- --

3360.10

-- -- --

--

-- -- --

    • 两市总计资金流入: --
      两市总计资金流出: --
      净流入: --
    • 两市总计资金流入: --
      两市总计资金流出: --
      净流出: --