C コードのコマンド ライン引数パーサーとしてargtableを使用する機会があれば、ここに私の質問があります。
私の意図
argtable2 ライブラリの最新バージョンを使用して、Linux プラットフォームで C でプログラミングしています。
私がアーカイブしたいのは、複数の入力ファイルとオプションのオプション(それを と呼びましょう)を取るプログラムがあること-o
です。-o
がシェル呼び出しのオプションとして提供されていない場合、プログラムによって出力はまったく書き込まれません。-o
が単独で提供される場合、プログラムの出力は「output.txt」というデフォルトのファイルに書き込まれます。オプションがファイル名と共に指定された場合、たとえば-o other.txt
、出力は指定されたファイル名(この場合は「other.txt」) に書き込まれます。
問題
私のすべての試みで、argtable misbehaved。とともに指定されたオプションの値を入力ファイルとして解釈します。そのため、4 つの入力ファイル (3 つの "inputfile*.dat" と、出力ファイルであるはずの "other.txt") があると解釈されます。-o
./program -o other.txt inputfile1.dat inputfile2.dat inputfile3.dat
問題を再現する
これは、私が何を意味するかを説明するためのシェルセッションです。問題が発生する最小限の例を使用します。私が何か間違ったことをしたのか、それとも libargtable2のバグなのかはわかりません:
confus@confusion:~$ gcc -o argbug argbug.c -largtable2
confus@confusion:~$ ./argbug
Error: missing option INPUT-FILES
Usage:
./argbug [-o [<file>]] INPUT-FILES
-o [<file>] File to write output to. Default is 'output.txt'.
Omit whole option to discard all output
INPUT-FILES Input files
confus@confusion:~$ ./argbug inputfile1.dat inputfile2.dat inputfile3.dat -o other.txt
inputfile[0] = inputfile1.dat # this is okay output
inputfile[1] = inputfile2.dat # as is this line
inputfile[2] = inputfile3.dat # also okay output
inputfile[3] = other.txt # "other.txt" is falsely recognized as an input file
outputfile = output.txt # should be "other.txt" instead of the default "output.txt"
いずれにせよ、argtable の作成者である私もスチュワードも、私の問題を実際に調査する時間がないようです。何か案は?