コマンド ライン アプリケーションを再設計しており、より直感的に使用できる方法を探しています。コマンド ライン アプリケーションに渡されるパラメーターの形式に関する規則はありますか? または、人々が役立つとわかった他の方法はありますか?
17 に答える
Windows のコマンド ライン仕様をよく目にしますが、プログラムが Linux 向けである場合、GNU コマンド ライン標準が最も直感的であることがわかります。基本的に、コマンドの長い形式には 2 つのハイフン (例: --help
) を使用し、短いバージョンには 1 つのハイフン (例: -h
) を使用します。また、ショート バージョンを一緒に「スタック」して (例: tar -zxvf
filename
)、長いバージョンと短いバージョンを思いのままに組み合わせることもできます。
GNU サイトには、標準のオプション名もリストされています。
getopt ライブラリは、これらのコマンドの解析を大幅に簡素化します。C が得意でない場合、PythonにはPerlと同様のライブラリがあります。
C# を使用している場合は、 Mono.GetOptionsを試してください。これは、非常に強力で使いやすいコマンドライン引数パーサーです。Mono 環境および Microsoft .NET Framework で動作します。
編集:ここにいくつかの機能があります
- 各パラメータには 2 つの CLI 表現があります (1 つの文字と文字列、たとえば -a または --add)。
- デフォルト値
- 強く型付けされた
- 手順を含むヘルプ画面を自動的に生成します
- バージョンと著作権画面を自動的に生成
特定の CLI で気に入っていることの 1 つは、ショートカットの使用です。
つまり、次の行はすべて同じことをしています
myCli.exe describe someThing
myCli.exe descr someThing
myCli.exe desc someThing
これにより、ユーザーは毎回 all コマンドを入力する必要がなくなります。
最善の方法は、できれば何も仮定しないことです。オペレーターが実行のためにアプリケーション名を入力し、パラメーターがない場合は、USAGE ブロックでヒットするか、代わりに Windows フォームを開いて、必要なものすべてを入力できるようにします。
c:\>FOO
FOO
USAGE FOO -{Option}{Value}
-A Do A stuff
-B Do B stuff
c:\>
宗教的なトピックの見出しの下にパラメータ区切りを配置します: ハイフン (ダッシュ)、二重ハイフン、スラッシュ、なし、位置指定など。
プラットフォームを示していませんでしたが、次のコメントでは、Windows と .net を想定します。
.net でコンソール ベースのアプリケーションを作成し、コンソール ベースのプロジェクトを選択して Windows.Forms、System.Drawing などの DLL を追加するだけで、Forms を使用してデスクトップとやり取りできるようになります。
私たちはこれを常に行っています。これにより、誰も暗い路地を曲がらないことが保証されます。
これはあなたを助けるかもしれないCodeProjectの記事です...
VB がお好きな方は、別の記事 (ガイダンス関連のコンテンツがもう少しあります) をご覧ください...
コマンド ラインの規則は OS ごとに異なりますが、おそらく最も多く使用され、最も一般に精査されている規則は、GNU getopt パッケージでサポートされている規則です。見る詳細については、 http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.htmlを参照してください。
これにより、-nr などの 1 文字のコマンドと、--numeric --reverse などのより長い自己文書化オプションを混在させることができます。--help (-?) オプションを実装すると、ユーザーは必要な情報をすべて把握できるようになります。
@voncの回答を補完して、あいまいな略語を受け入れないでください。例えば:
myCli.exe describe someThing
myCli.exe destroy someThing
myCli.exe des someThing ???
実際、その場合、おそらく「破壊」の略語は受け入れられないでしょう...
私は常に /? を追加します。パラメータを使用してヘルプを取得し、私は常にデフォルト (つまり、最も一般的なシナリオ) の実装を試みます。
それ以外の場合、スイッチには "/x" を使用し、値を渡す必要があるスイッチには "/x:value" を使用する傾向があります。正規表現を使用してパラメーターを簡単に解析できます。
コマンドライン パーサーを含む .Net C# ライブラリを作成しました。CmdLineObject クラスから継承するクラスを作成し、Initialize を呼び出すだけで、プロパティが自動的に設定されます。さまざまな型 (プロジェクトに含まれている高度な変換ライブラリを使用)、配列、コマンド ライン エイリアス、ワンクリック引数などへの変換を処理できます。コマンド ライン ヘルプ (/?) も自動的に作成します。
興味のある方は、プロジェクトの URL はhttp://bizark.codeplex.comです。現在、ソースコードとしてのみ入手可能です。
-operation [parameters] -command [your command] -anotherthings [otherparams]....
例えば、
YourApp.exe -file %YourProject.prj% -Secure true
getopts など、コマンド ライン インターフェイスを生成するための標準ツールの 1 つを使用すると、自動的に適合します。
アプリケーションに使用する規則は、次の条件によって異なります。
1) アプリケーションの種類。
2) 使用しているオペレーティング システム。Linux? ウィンドウズ?どちらも異なる規則を持っています。
私がお勧めするのは、渡されたパラメーターに特に注意を払いながら、システム上の他のコマンドの他のコマンド ライン インターフェイスを調べることです。パラメータが間違っていると、ユーザー ソリューション向けのエラー メッセージが表示されます。見つけやすいヘルプ画面も使いやすさに役立ちます。
アプリケーションが正確に何をするかを知らなければ、具体的な例を挙げることは困難です。
Perl を使用している場合、私のCLI::Applicationフレームワークがまさに必要なものかもしれません。これにより、SVN/CVS/GIT のようなユーザー インターフェイスを備えたアプリケーションを簡単に構築できます ("your-command -o --long-opt some-action-to-execute some parameters")。
アプリケーションに使用する規則は、次の条件によって異なります。
1) アプリケーションの種類。2) 使用しているオペレーティング システム。
これは確かに真実です。dos-prompt の規則についてはよくわかりませんが、UNIX ライクなシステムでは、一般的な規則はおおよそ次のとおりです。
1)フォーマットは
appName パラメーター
2) 1 文字のパラメータ (「x」など) は -x として渡されます 3) 複数文字のパラメータ (「add-keys」など) は --add-keys として渡されます