• 我的订阅
  • 科技

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

类别:科技 发布时间:2023-01-09 20:48:00 来源:浅语科技

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

票圈大神们贡献了一大波方法,我先进行一波总结。

比如Java语言的SpringShell,可以和SpringBoot一起制作一款命令行工具,比如以下写法。@ShellComponent public class SSHCommand { @ShellMethod(value = "connect to remote server") public void ssh(@ShellOption(value = "-s") String host) { System.out.println(host); } }

即可支持一条ssh命令,并附带-s参数。shell: ssh -s 192.168.0.3192.168.0.3

用java给自己做一款这样的小工具集,还是非常方便的。当然如果你不想使用Spring,也有JCommander这样的工具,不依赖Spring套件,只不过写法就会比较丑陋。

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

除了java语言,大家推荐最多的还是Go语言的Cobra库,官网cobra.dev非常简洁。

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

具体大家去官网看吧,都是非常直观明了的demo,非常舒服。其他的我还没有详细调研过,这里把票圈反馈都说下:

dpdk

python的click

C++的boost

rustclap

nodejs

javacommon-cli包

urfave/cli

xterm.js

cpp的boost

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

先不说这个函数是什么,你知道你常用的那些命令,像echo,cp,mv这些,都是由谁提供的么?

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

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

既然这些CLI工具类都是coreutils里的代码,那我们看看这里的实现方式,一定是比较优雅的。

打开coreutils的源码,随便找个命令,比如basename.c找到它的main方法,可以看到就是使用了getopt_long来解析的命令行参数。

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

那要说实现的优雅度,我们和coreutils里的实现方式一样,总归是没有错的。

不过getopt_long具体怎么使用呢?我们man一下它,就可以看到非常详细的介绍,下面还有特别简单的demo,可以直接编译运行的。

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

对比发现,这demo和coreutils里的用法大体结构是一样的,都是while循环里不断调用 getopt_long函数解析-或者--的参数,然后通过switch 判断返回值c的值,来执行不同的操作。

同时,将long_options也是就--参数列表放在一个数组中,使用 required_argument表示需要参数,no_argument表示无需参数。

这时我有个想法,如果自己实现一套coreutils,不但能学习到使用C语言制作一款优雅的CLI工具的方法,还能对常用shell命令有一个深入源码式的了解,同时我们也可以改造这些命令使其具有我们自己的特性,还可以为今后增加自己的新命令打下基础。

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

一举好多的呀!开干!

coreutils中有个特别有趣且简单的命令,yes,你在Linux命令行里输入yes按下回车,会发现它持续不断输出y在命令行中,非常快,就是这效果。

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

我是不是可以自己实现一套,并对其进行改造,让它可以输出行号,并且控制输出的时间间隔,别那么快。

说干就干,一款dbf-yes工具就做出来了。

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

它可以支持用-n参数表示输出行号,用-s参数表示时间间隔秒数,最后跟一个参数 hehe表示要输出的字符是什么。

感觉这个学习方式还是非常不错的,涉及到的知识点不少,而且又非常有成就感,像闯关一样把coreutils里面的全部工具都实现一遍,增加自己的特性。

以上内容为资讯信息快照,由td.fyun.cc爬虫进行采集并收录,本站未对信息做任何修改,信息内容不代表本站立场。

快照生成时间:2023-01-09 21:45:04

本站信息快照查询为非营利公共服务,如有侵权请联系我们进行删除。

信息原文地址:

《星空》绕过成就锁定的工具上传
...使用某些Mod或是使用控制台,游戏就会禁止他们获得任何成就。不过和《上古卷轴5:天际》和《辐射4》等游戏一样,所有问题都可以用Mod解决,即便是Mod导致的问题。实际上,为了
2023-09-07 20:03:00
省钱省心  乐在其中
...自己在家中动手维修的具体事例,以及在此过程中获得的成就感与实用经验。制作防潮架“我一直觉得,能自己动手解决的问题,就没必要花大价钱请人来做。”居住在延平的市民张雄在接受采访时
2024-06-12 03:14:00
武科大外国语学院:探索“心理健康+劳动教育”新融合
...介绍:“通过种植绿植,学生们能够体会到成长的喜悦和成就感,从而激发他们对学习和生活的热情和信心。同时,绿植的生长也象征着希望和未来的美好,鼓励学生们在追求梦想的道路上勇往直前
2024-06-13 18:48:00
冰城一家人的冰雪情缘
...热火朝天,雕出来的作品也特别漂亮,自己看到后特别有成就感。”张雪松回忆道。 最近几年,由于年事已高且患有痛风,张德祥基本上不参与冰雪赛事,而是把大部分精力投入到培养学生上。
2023-01-16 09:27:00
戈壁滩上逐风而行
...”结束。看着自己检修过的道岔,我的心里有一种满满的成就感。年关已近,年味越来越浓,第一次离开家人在外地过年,多少有些想家,但一想到自己也能为春运作一些贡献,我就有一种说不出的
2024-02-10 09:43:00
知地明理,以做促学 济南高新一实验学子“巧手自制地球仪”
...动手能力、丰富地理知识,同时也能感受到制作的乐趣和成就感。希望有更多的人能够去用心制作地球仪,发现其中的乐趣。”同学们通过此次活动也是收获满满。本次的地球仪模型制作活动,不仅
2025-03-04 18:37:00
我的老师有绝活丨榫卯“锁”匠心 毫厘见真章
...具慢慢已经长成了他的双手。“看着加工的成品会非常有成就感,特别是第一次制作出榫卯结构的时候就感觉非常精妙,后面就开始不断地挑战难度越来越高的结构,这种新鲜感和成就感推着我通过
2024-09-07 09:25:00
小手匠心,创意无限——青岛市崂山区中韩街道开展青少年手工制作系列活动
...,孩子们手持自己亲手编织的中国结,脸上洋溢着满满的成就感与喜悦。这不仅是一次手工艺的学习之旅,更是一次深刻的文化体验,让他们更加深刻地感受到了中华优秀传统文化的魅力与博大精深
2024-11-13 18:06:00
长沙理工大学设计艺术学院暑期实践团助力残疾人就业发展
...员们对自己的作品都非常满意和自豪,“很久没有这样的成就感了。”有些学员的家属也参与其中,家属表示:“没想到我们能做出这样漂亮的作品,与儿子一起做完一件事特别有成就感。”此次活
2023-07-31 21:31:00
更多关于科技的资讯: