stdin、stdout 的命令行参数约定

stdin、stdout 的命令行参数约定

我正在编写一个命令行工具,它接受一个文件并修改其内容。我希望用户界面尽可能规范。到目前为止,我已经

$ foobar -h
usage: foobar [-h] [--version] [infile] [outfile]

Some help text.

positional arguments:
  infile         input LaTeX file (default: stdin)
  outfile        output LaTeX file (default: stdout)

optional arguments:
  -h, --help     show this help message and exit
  --version, -v  show program's version number and exit

但我注意到像这样的工具sed 总是打印到stdout,除非给出-i参数,在这种情况下输入文件将被就地修改。这是一个常见的 Unix 约定吗?

答案1

-ised特定的。例如,awk它会是-i inplace,而许多其他人甚至不支持就地操作。

有许多约定。最重要的是,如果没有给出输入,则使用 STDIN,如果没有给出输出,则使用 STDOUT。但你已经这么做了。

一般来说,大多数程序将命令行上的文件列表视为必须读取的文件。许多程序使用-o filename来指示输出应该转到filename. GNU 似乎也喜欢--output这个。

如果您想显式使用 STDIN 或 STDOUT,--似乎或多或少是指定的标准方式。

但是,有很多程序不遵循这个约定。有些使用最后一个位置参数作为输出。有些我们--表明命令行的其余部分仅包含文件,有些(例如dd)已经创建了自己的标准。

所以,如果我是你,我会坚持下去-o --output用于输出文件并用于--STDIN 或 STDOUT。并编写清晰的手册页,以便您的程序变得可预测。

相关内容