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

-i具体的ですsed。たとえば、他の多くのawk場合-i inplace、内部操作もサポートしていません。

多くのルールがあります。結論は、入力がない場合はSTDINが使用され、出力がない場合はSTDOUTが使用されることです。しかし、あなたはすでにそうでした。

通常、ほとんどのプログラムはコマンドラインのファイルリストを読み取る必要があるファイルとして扱います。-o filename出力がどこに行くべきかを示すために、多くのプログラムで使用されますfilename。 GNU--outputもこれが好きなようです。

STDINまたはSTDOUTを明示的に使用したい場合は、--これを指定するかなり標準的な方法のようです。

しかし、この規則に従わないプログラムがたくさんあります。一部は最後の位置引数を出力として使用します。私たちの中には、--コマンドラインの残りの部分にはファイルだけが含まれていると言い、一部(たとえばdd)は独自の標準を作成しました。

だから私があなたなら、私はそれに固執するでしょう。-o そして --output出力ファイルに使用され、--STDIN または STDOUT とともに使用されます。そして、プログラムを予測できるように、明確なマニュアルページを作成してください。

関連情報