CLI命令名的诗学

2020-06-10 07:43:21

“单词会滑入句法规定的位置,像大气中的尘埃一样闪烁着我们称之为意义的杂质。”--安东尼·伯吉斯,Enderby,406。

命名CLI命令需要深思熟虑。然而,大多数命令的命名充其量似乎是戏谑的漫不经心,在最坏的情况下是愚蠢的冷漠-既没有经受住时间考验所需的先见之明,也没有对命令行悠久而可敬的历史所要求的尊重。如果命名是我们作为程序员面临的两个最重要和最具挑战性的任务之一,那么为什么许多命令似乎被命名得如此随意呢?

一个糟糕的命令名是一种诅咒,但一个伟大的命令名却有一种诗意的优雅。如果你要在命令行咒语书中添加一些东西,我希望这篇帖子能帮助你澄清和考虑这个过程。

没有任何理由要求用户按下Shift键。我在看你,VirtualBox和Easy_Install。

如果您花足够的时间思考命令名称,您会高兴地发现,将命令命名为🐥_Tool在技术上是可行的。请不要这样做。

键入命令感觉如何?这是尴尬的还是令人满意的?手指旅行需要多少钱?例如,sha256sum给人的感觉就像漱口沙子,但Wireshark的capinfos命令就像轻轻吹过按键的微风。

版本号不应出现在命令名中。现在是2020年,在我的系统上有一个叫做python370m的命令。没有什么比这更清楚地揭示了我们古老而受人喜爱的命令行生态系统的侵蚀。在50多年的终端打字过程中,我们还没有想出如何让多种版本的东西和平共处。

命令名不能以字母g开头,即使它正好位于键盘中央,也是一个非常好的字母。所有过去和未来的g命令都是理查德·斯托尔曼(Richard Stallman)的个人财产,他在1983年获得了整个g名称空间的独家、永久、不可撤销的全球许可。虽然他不情愿地批准了Git和Go的例外,但如果你不是莱纳斯·托瓦尔兹(Linus Torvalds)或谷歌(Google),就别费心找他了。

你指挥的位置越小,它的名字就应该越长。应该为人们一直使用的实用程序保留非常短的名称,如cd、ls、rg。

除非您的软件包包含一套shell实用程序,否则不要用几十个命令污染名称空间。安装一个或两个命令,并使用子命令到达程序的不同角落。当然,您可能希望由单独的可执行文件提供清晰的边界,原因有很多。如果您确实需要多个二进制文件,您总是可以通过一个或两个中央命令调用它们。Git在这里做得很好;您可以通过在$PATH中放置一个名为git-[command]的可执行文件来扩展Git,然后您就可以使用git[command]访问它。

不要用新的标准、协议或文件格式来命名您的命令。这些东西时好时坏,而且往往太具体了。如果你想让你的命令进入Unix命令的金字谜,不要称它为OpenSSL。当然,命名OpenSSL的人至今仍在后悔。他们会把它改名为Opentls吗?不行。现在已经太晚了。它现在在太多的Bash脚本中。我们不得不忍受OpenSSL,直到太阳把我们吞没。ffmpeg也是如此,它比快进mpeg文件做得更多。

不要根据命令提供的用户界面类型来命名命令。示例:cfdisk是先前命令(Fdisk)的一个版本,具有较新的接口(Curses)。在这种情况下,开发人员在Curses接口上花费了如此多的时间,以至于他们决定以命令本身的名义来庆祝他们的成就。但从用户的角度来看,这真的无关紧要。这是没有意义的。想象一下,如果斯莱克自称韦伯瑞克。

不要对通用词提出宽泛的要求。多年来,ImageMagick一直提供CONVERT命令。除非您已经构建了一个能够将任何内容转换为任何内容的工具-将Markdown文件转换为jpg,将沙拉旋转器转换为大蒜压榨机-否则您不应该将程序命名为Convert。

ImageMagick version7明智地放弃了对CONVERT的要求,转而使用新的MAGICK命令,该命令有一个Convert子命令。他们被迫放弃转换,因为Windows也有转换命令。您知道Windows CONVERT命令做什么吗?我相信你不会。而且你是个相当聪明的人。Windows中的Convert用于在不同类型的文件系统之间转换磁盘。😒是一个多么完美的命令示例,它声称的名称对于一个令人难以置信的小利基来说太宽泛了!

想象力会带你走得更远。你可能会从一本最喜欢的菲律宾民间故事书,一些北欧神话,莎士比亚十四行诗中获得灵感。别太沉迷于北欧神话,好吗?也许伊格德拉西尔的故事让你的人生道路更加清晰。我不知道,我还没有读过。但我不需要读它就能告诉您,这是一个可怕的shell命令名称。

Vim是一个很棒的名字,因为Vim正是您在完成忍者替换(将CSV转换为JSON)后的感觉,或者是一个巧妙的多行编辑,根据烂番茄分数的降序对恐怖电影标题列表进行排序。Vim是vi的“改进”版本(现在是标准版本)。我仍然不确定为什么发明vi的古罗马人决定用数字6来命名他们的文本编辑器?

cURL可能是有史以来命名最巧妙的命令。它是一个动词。它让人想起一个招手的手指。它做到了它说的那样,当你大声拼写出来的时候,它听起来就像“看到URL”。

并不是所有最好的2-5个字母的单词都用完了。请不要使制表符填写您的命令名称。

考虑一下你的命令将如何在世界各地发音。柯达(Kodak)是一个在许多语言中发音相同的单词。乐高(Lego)和宜家(Ikea)可能也是很棒的命令名称,如果它们还没有注册商标的话。

当你的另一只手放在鼠标上时,你能像猫一样用一只手输入你的命令吗?

啊,真是刺骨的寒意!猫头鹰虽然有一只鹰嘴,但还是很冷;黑角兽一瘸一拐地在结冰的草地上颤抖,而披着羊毛褶皱的雅克人却一声不响--这句话出自约翰·济慈的“圣艾格尼斯之夜”。“圣艾格尼斯的前夜”(The Eve of St.Agnes)改编自约翰·济慈(John Keats)。

嘿,这只是一条经验法则,但请注意AssetCacheTetheratorUtil命令(2017年添加到MacOS中)永远不会在这里运行。

如果您真的想同时做到字面和利基,您可以在您的名字中表示解决方案域,以使其清晰。但你在这里走的是一条微妙的线。古老的mkfs试过了。它很好地嵌入到与在文件系统中创建内容相关的命令组中,比如mkdir、mculd、mkfile、mktemp,甚至mkLost+find。考虑到可以想象许多命令来创建与文件系统无关的东西,使用mk作为这里的通用性可能有点过分。但是,文件是操作系统提供的主要抽象,所以使用MK并不是最糟糕的事情。

深思熟虑的毫无意义是完全可以的,如果你希望你的指挥部的解决方案领域不断发展,甚至可能是你最好的选择。我仍然不知道eMac是什么,也不知道为什么我需要几个eMac来编辑文件。毫无意义的是我们在Smallstep这里采取的路线,在那里我们谦虚地声称我们的公钥加密工具包和证书颁发机构使用了step和step-ca命令。Step的名字在很小程度上向月球着陆致敬,但作为一个名字,它真的与密码没有任何联系,这没什么,因为它很容易打字!

您是否有命名CLI命令的任务?你的方法是什么?在推特上联系我们。