Tcl 内でコマンド ライン引数を解析しています。引数は、パラメーターリストで宣言された方法と比較して、順不同で問題ありませんでした (実際に期待を呼び出していますが、この時点までは Tcl のみです)。
# cmdline package to handle arguments
package require cmdline
# set parameters
set parameters {
{apk.arg "" "apk file"}
{apkdirfrom.arg "" "apk from dir"}
{apkdirto.arg "" "apk to dir"}
{pkg.arg "" "package"}
{mainclass.arg "" "main class"}
{monkey.arg "" "monkeyrunner script"}
{remotehost.arg "" "remote host"}
{remoteuser.arg "" "remote user"}
{logdir.arg "" "log dir"}
{timeout.arg "" "timeout"}
{disable-uninstall.arg "" "unimplemented: disable uninstall. 0 disable is off, 1 disable is on."}
}
array set arg [cmdline::getoptions argv $parameters]
しかし、この注文はうまくいきませんでした。ここに示されているものとは少し異なる順序でそれらを呼び出した可能性があると思います。実際、Mac の Tcl と Windows の Cygwin Tcl を使用すると、その仮定は正しいようです。しかし、Ubuntu 12.04 Linux を使用すると、この仮定は正しくないことが判明しました。それらは特定の順序である必要がありました。
これはうまくいった順序です:
# パラメータを設定
set parameters {
{apk.arg "" "apk file"}
{apkdirfrom.arg "" "apk from dir"}
{apkdirto.arg "" "apk to dir"}
{pkg.arg "" "package"}
{mainclass.arg "" "main class"}
{monkey.arg "" "monkeyrunner script"}
{remotehost.arg "" "remote host"}
{remoteuser.arg "" "remote user"}
{timeout.arg "" "timeout"}
{disable-uninstall.arg "" "unimplemented"}
{logdir.arg "" "log dir"}
}
array set arg [cmdline::getKnownOptions argv $parameters]
つまり、ログディレクトリは、最後に来ると問題ないようです。
順序が重要であると思われるかどうか知っていますか? ないと思っていたのですが、どうやらあるようです。
とにかく、Mac では tcllib 1.12 を使用し、Ubuntu 12.04 では tcllib 1.14 を使用していることがわかりました。コマンドライン ライブラリを交換しようとしましたが、うまくいきませんでした。Macからcmdlineをコピーしたため、Windowsでは機能すると思いますが、それは機能します。
誰かがこの問題に少し光を当てることができれば、それは役に立ちます。
もう少し確実なもの (代替のコマンド ライン パーサー) をお勧めできれば、それは素晴らしいことです。