1

我正在为我正在做的一些研究制作一些命令行工具。我希望这些工具遵循有关 Unix 中命令行程序的常用约定。

我应该使用标志还是只列出参数?

program one two three
program -a one -b two -c three
  • 输入文件通常在命令列表中的哪个位置,或者将其更好地<放入程序中?
  • 输出文件名呢?
  • 我应该为输出格式指定文件扩展名,还是让我的程序自动添加正确的扩展名?
  • 当用户输入无效命令时,是否有典型的“正确用法”消息?
  • 是否需要“--help”或“-h”?

另外,是否有某种我可以包含的头文件有助于管理这些头文件?

4

2 回答 2

1

如果您正在寻找“标准”,那么您可能会比查看GNU 的命令行接口标准更糟糕。其他标准可用。

就这方面的编码而言,看看boost::program_options. 这不仅可以节省您编写大量自己的代码,而且可以很好地格式化呈现给用户的选项(您要求的原型“正确使用”消息)。

在回答您的具体问题时:

  • 输入文件通常在命令列表中的哪个位置,或者将其 < 放入程序中更好?

我希望这些出现在命令行的末尾。就像在 GNU中一样grep。如果您只处理一个文件并希望将其stdin用作输入源,那么大多数用户不会感到惊讶。

如果您的命令处理大量文件,那么必须在文件名之前指定一个开关是不常见的。想想cat

  • 输出文件名呢?

A -oor--output选项相当普遍。如果您的文件只需要一个输入和一个输出,那么program inputfile outputfile很多用户不会感到惊讶。如果没有指定输出文件,也许你会输出到stdout; 这不会是不寻常的行为,并允许您的用户通过其他命令(例如,等)管道输出grep他们less还可以使用.>

  • 我应该为输出格式指定文件扩展名,还是让我的程序自动添加正确的扩展名?

这大概是一个有待商榷的问题。如果我指定了输出文件名,我希望在程序不更改名称的情况下找到创建(或在提示后替换)该文件。

  • 当用户输入无效命令时,是否有典型的“正确用法”消息?

再次以 GNUgrep为例:

grep: unrecognized option '--incorrect'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

这不会让太多用户感到惊讶,并且如果他们在没有让信息淹没他们的情况下犯了错字,就不会给他们指明正确的方向。

  • 是“ --help”还是“ -h”?

这取决于你的客户!当这个选项不可用时,我觉得很沮丧。

于 2013-02-14T05:36:31.207 回答
0

通常来说,标志用于提供选项,参数用于传递信息。如果您有输入、输出文件作为命令行参数,请使用 -i -o 等标志,因此顺序无关紧要。如果您想(并且需要)提供文档,则需要 -h。

于 2013-02-14T05:32:11.800 回答