我在 Tcl 中解析命令行参数。与在参数列表中声明的方式相比,这些参数没有问题(我实际上是在调用 expect,但到目前为止它只是 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 和 Window 的 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。我试图换出 cmdline 库,但这没有用。我认为在 Windows 上它可以工作,因为我从 mac 复制了 cmdline,并且它可以工作。
如果有人可以对这个问题有所了解,那将很有帮助。
如果您可以推荐一些更简单的东西(替代命令行解析器),那就太好了。