如何建立一个伟大的命令行界面的灵感

时间:2009-12-12 13:35:21

标签: language-agnostic command-line user-interface

我正在构建一个交互式前端的过程 迄今为止已用于运行工作负载的分布式应用程序 有类似结构的批处理作业,根本不需要UI。该应用程序主要使用Perl和C编写,并在Unix和Windows机器上运行,但我认为这与UI无关。

第一个这样的前端将有一个命令行用户界面 - 目前,我设想类似于Procurve的CLI 我与之合作的交换机和思科路由器。

与现代网络设备CLI一样,命令也会类似 简单的句子,(即show vlans ports 1-4)和CLI将 有一些隐式状态,就像Unix shell和 Windows中的cmd.exe具有环境变量并且当前有效 目录。此外,我想实现伟大的标签完成 尽可能地了解应用程序的状态,我希望能够用as做到这一点 尽可能少的application- 特定的代码。

低级功能(终端I / O)似乎很容易实现 GNU Readline或类似的库的顶部,但这只是在哪里 真正有趣的开始。到目前为止,我已经看过Perl模块 Term::ShellTerm::ShellUI, 但我不相信我想要使用它们中的任何一个。我仍然 考虑滚动我自己的解决方案,目前我正在寻找 灵感。

无论如何,您能推荐任何应用程序或库吗? 实现语言,实现了一个良好的CLI,我可以从中实现 借鉴意见?

3 个答案:

答案 0 :(得分:2)

我建议你看看Microsoft PowerShell背后的哲学。从在命令之间管道输入对象的想法到命令和参数语法的一致性,我认为它可以成为灵感的来源。

答案 1 :(得分:1)

关于你的最后一句话/问题,我特别喜欢zsh完成和行编辑(zle)。

答案 2 :(得分:1)

您可以尝试查看libcli:

  

“Libcli提供了一个共享库   包括类似思科的命令行   与其他软件接口。“

http://code.google.com/p/libcli/

BTW - 我忘了提到它是GNU Lesser GPL,并且思科在某些产品中实际使用它。