![stdin、stdout 的命令行参数约定](https://linux22.com/image/181025/stdin%E3%80%81stdout%20%E7%9A%84%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E7%BA%A6%E5%AE%9A.png)
我正在编写一个命令行工具,它接受一个文件并修改其内容。我希望用户界面尽可能规范。到目前为止,我已经
$ 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
-i
是sed
特定的。例如,awk
它会是-i inplace
,而许多其他人甚至不支持就地操作。
有许多约定。最重要的是,如果没有给出输入,则使用 STDIN,如果没有给出输出,则使用 STDOUT。但你已经这么做了。
一般来说,大多数程序将命令行上的文件列表视为必须读取的文件。许多程序使用-o filename
来指示输出应该转到filename
. GNU 似乎也喜欢--output
这个。
如果您想显式使用 STDIN 或 STDOUT,--
似乎或多或少是指定的标准方式。
但是,有很多程序不遵循这个约定。有些使用最后一个位置参数作为输出。有些我们--
表明命令行的其余部分仅包含文件,有些(例如dd
)已经创建了自己的标准。
所以,如果我是你,我会坚持下去-o
和 --output
用于输出文件并用于--
STDIN 或 STDOUT。并编写清晰的手册页,以便您的程序变得可预测。