代码之家  ›  专栏  ›  技术社区  ›  DanDan

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

  •  3
  • DanDan  · 技术社区  · 14 年前

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

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

    考虑事项1,调用:

    program.exe备份

    program.exe/备份

    program.exe-备份

    program.exe—备份

    考虑2,参数:

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

    program.exe备份-源“c:\file1.txt”-目标“c:\file1.bak”(显式)

    program.exe备份-源“c:\file1.txt”“c:\file2.txt”“c:\file3.txt”-目标“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 backup“c:\file1.txt”“c:\file1.bak”backup“c:\file2.txt”“c:\file2.bak”(是否允许这样做?)

    考虑4,打字经济:

    program.exe备份

    程序包

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

    7 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

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

    • 最终用户最能理解
    • 最小歧义
    • 遵循被编码的平台的惯例
    • 在我的代码中最容易解析

    所以在窗户上我会去的 / 作为前缀(遵循惯例) /source /destination (最容易理解和最不含糊)并且不允许链接,因为这会导致解析的复杂性,所以:

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

    无论如何,还允许参数名称的缩写版本,因此您可以将上面的内容缩小到:

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

    但不要让它变得更神秘。此外,还包括 /? 可用于列出程序语法的参数。AS 彼得姆 在对我答案的评论中指出,做同样的事情是个好主意 ? 当用户在不指定任何参数的情况下调用程序时。没有什么比运行一个cli程序并接收到以下信息更没帮助,也更没用:

    程序名v1.01

    未指定参数,请使用 ? 求助

    另一个需要考虑的重要问题是: 不要重新发明轮子 . 外面有无数的命令行解析器,看看 this question 从一个开始(如果你使用的是面向Windows的C)。 不要做别人已经做得很好的平庸的事情。 .

        2
  •  1
  •   Brian R. Bondy    14 年前

    我喜欢在长名称中使用双破折号,除了使用单破折号的单字符等效短格式之外。

    如果您正在做一些不平凡的事情,我还建议您始终使用开关名称,并根据开关的功能选择开关值。

    例如,要备份支持以下两项:

      program.exe --backup   
      program.exe -b 
    

    恢复以下两种支持:

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

    要获得以下两项的帮助支持:

      program.exe --help
      program.exe -h
    
        3
  •  1
  •   Julius A    14 年前

    明确的参数和/帮助开关来解释用法。这样,最终用户就可以自由地将哪个参数放在第一位,从而不强制执行特定的参数顺序。

        4
  •  1
  •   Didier Trosset    14 年前
    • 允许 --long-option-name -lon 用于可选参数。
    • 创造 backup.exe 而不是使用 backup 作为命令 program.exe .
    • 使用标准输入和标准输出作为默认输入和输出文件。
    • 使用当前目录作为操作的默认位置。

    这适用于一般的UNIX/Linux规则。对于窗户来说,它们是完全不同的。

    • 不要使用 /source /destination . 想象一下如果 cp ( copy 需要它。
        5
  •  1
  •   Ken    14 年前

    一般来说,您应该遵守平台的约定。不幸的是,Microsoft Windows在命令行界面方面一直很不一致!因此,你应该同样不一致。我认为这种情况下的理想模式是众所周知的不一致 dd :

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

    没有什么比这更好的了。

        6
  •  0
  •   Micah    14 年前

    首先,我会放弃 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"
    
        7
  •  0
  •   Bernard    14 年前

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