创建命令行界面时的注意事项

时间:2010-09-03 15:09:12

标签: command-line-interface

有很多GUI最佳实践。我在开发命令行程序时正在寻找最佳实践。

例如,如果我创建备份程序最好的是什么?

考虑1,调用:

program.exe备份

program.exe / backup

program.exe -backup

program.exe --backup

考虑2,参数:

program.exe备份“C:\ file1.txt”“C:\ file1.bak”(隐式源和目标)

program.exe backup -source“C:\ file1.txt”-destination“C:\ file1.bak”(显式)

program.exe backup -source“C:\ file1.txt”“C:\ file2.txt”“C:\ file3.txt”-destination“C:\ files.bak”(多个来源)

program.exe backup -source“C:\ file1.txt”-source“C:\ file2.txt”-source“C:\ file3.txt”-destination“C:\ files.bak”(多个来源,替代语法)

考虑3,链接:

program.exe备份“C:\ file1.txt”“C:\ file1.bak”backup“C:\ file2.txt”“C:\ file2.bak”(应该允许这样做吗?)

考虑4,输入经济:

program.exe备份

program.exe bkp

program.exe b(所有这些都应该是同一命令的别名吗?)

7 个答案:

答案 0 :(得分:2)

我总是喜欢什么(从大多数到最不重要的顺序):

  • 最终用户最容易理解
  • 最不明确的
  • 遵循正在编码的平台的惯例
  • 最容易解析我的代码

所以在Windows上我会选择/作为前缀(遵循约定),/source/destination(最容易理解且最不明确)并且不允许链接解析复杂性,所以:

  

program.exe / backup / source:“c:\ source”/ destination:“c:\ destination”

一定也允许参数名称的缩写版本,因此您可以将上述内容缩小为:

  

program.exe / b / s:“c:\ source”/ d:“c:\ destination”

但是不要让它变得更加神秘。此外,还包含一个/?参数,可用于列出程序的语法。正如 Peter M 在我的回答评论中指出的那样,当用户调用您的程序而不指定任何参数时,最好与/?做同样的事情。没有什么比运行CLI程序和接收更有帮助,更令人沮丧的无用了:

  

计划名称v1.01

     

未指定参数,请使用/?获取帮助

与最后一点相关的另一个重要事项是:不要重新发明轮子。那里有无数的命令行解析器,看一下this question的答案作为起点(如果你使用C#定位Windows)。 做一些其他人已经做好的事情,不要做平庸的工作。

答案 1 :(得分:1)

除了使用单个短划线的单个字符等效短格式外,我更喜欢使用双短划线作为长名称。

如果你正在制作一些非常重要的东西,我还建议总是使用一个开关名称,并根据开关的作用选择开关值。

例如,备份支持:

  program.exe --backup   
  program.exe -b 

并恢复对以下方面的支持:

  program.exe --restore "5/6/2010"
  program.exe -r "5/6/2010"

对于以下两者的帮助支持:

  program.exe --help
  program.exe -h

答案 2 :(得分:1)

绝对参数和/ Help开关来解释用法。因此,最终用户可以自由地放置哪个参数,因此不会强制参数的特定顺序

答案 3 :(得分:1)

  • 允许--long-option-name-lon获取可选参数。
  • 创建backup.exe,而不是使用backup作为program.exe的命令。
  • 使用标准输入和标准输出作为默认输入和输出文件。
  • 使用当前目录作为操作的默认位置。

这适用于一般的UNIX / Linux规则。对于Windows,它们完全不同。

  • 请勿使用/source/destination。想象一下,如果cpcopy)需要它,那就太好了。

答案 4 :(得分:1)

通常,您应该遵守平台的惯例。不幸的是,Microsoft Windows在命令行界面上非常不一致!因此,你应该同样不一致。我认为在这种情况下理想的模型是着名的不一致dd

dd if=C:\file1.txt of=C:\file2.bak

没有别的东西了。

答案 5 :(得分:0)

对初学者来说,我会放弃program.exe语法,只需去backup.exe

我自己喜欢/option:<value>语法。我可能希望能够做到以下几点:

backup /d:"c:\mydirectory" /o:"c:\mybackup.bak"
backup /f:"c:\mydiredctory\myfile.txt" /o:"c:\mybackup.bak"
backup /f:"mydiredctory\myfile.txt,mydiredctory\myfile2.txt" /o:"c:\mybackup.bak"

答案 6 :(得分:0)

我建议找一个库,它允许您定义命令行参数并正确解析它们,同时还打印出用于将所有参数定义到应用程序用户的使用说明。应该有大量的开源库可用于多种语言和平台。