1

私が行っているいくつかの研究のために、いくつかのコマンドライン ツールを作成しています。これらのツールが、Unix のコマンド ライン プログラムに関して一般的に使用されている規則に従うことを望みます。

フラグを使用するか、単にパラメーターをリストする必要がありますか?

program one two three
program -a one -b two -c three
  • 入力ファイルは通常、コマンドのリストのどこに行きますか、それとも<プログラムに入れる方が良いですか?
  • 出力ファイル名はどうですか?
  • 出力形式のファイル拡張子を指定する必要がありますか、それともプログラムに自動的に正しい拡張子を付ける必要がありますか?
  • ユーザーが無効なコマンドを入力したときに、典型的な「正しい使用法」のメッセージが表示されますか?
  • 「--help」または「-h」は必要ですか?

また、これらの管理に役立つ、インクルードできるヘッダー ファイルはありますか?

4

2 に答える 2

1

「標準」を探している場合は、GNU の Standards for Command Line Interfaces を見るよりも悪いことができます。他の規格が利用可能です。

これに関するコーディングについては、 をご覧くださいboost::program_options。これにより、独自のコードを大量に作成する手間が省けるだけでなく、ユーザーに提示するためのオプションを適切にフォーマットすることができます (原型的な「正しい使用法」というメッセージが要求されました)。

具体的な質問への回答:

  • 入力ファイルは通常、コマンドのリストのどこに移動しますか?それとも、プログラムに < 入力する方がよいでしょうか?

これらはコマンドラインの最後に来ると思います。GNU のようにgrep。1 つのファイルのみを処理してstdinいて、入力ソースとして使用できるようにしたい場合、ほとんどのユーザーは驚かないでしょう。

コマンドが多くのファイルを処理する場合、ファイル名の前にスイッチを指定する必要があるのは珍しいことです。考えてみてくださいcat

  • 出力ファイル名はどうですか?

-oor--outputオプションはかなり一般的です。ファイルが正確に 1 つの入力と 1 つの出力を受け取る場合、program inputfile outputfile多くのユーザーは驚かないでしょう。出力ファイルが指定されていない場合は、おそらくstdout;に出力します。これは異常な動作ではなく、ユーザーが他のコマンド ( 、 など) を介して出力をパイプできるようにgrepますless。また、 を使用して stdout をファイルにリダイレクトすることもできます。>

  • 出力形式のファイル拡張子を指定する必要がありますか、それともプログラムに自動的に正しい拡張子を付ける必要がありますか?

これはおそらく議論の余地があります。出力ファイル名を指定した場合、プログラムが名前を変更することなく、そのファイルが作成された (または、プロンプトの後に置き換えられた) ことを期待できます。

  • ユーザーが無効なコマンドを入力したときに、典型的な「正しい使用法」のメッセージが表示されますか?

再び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 に答える