如何在tcl中指定命令行上的开关?

时间:2013-04-30 07:29:53

标签: tcl expect

如果我有一个期望脚本,我想根据需要执行某些代码部分。如果我的代码中有一些程序,如下所示

proc ABLOCK { } {

}

proc BBLOCK { } {

}

proc CBLOCK { } {

}

然后在执行脚本时,如果我可以使用某些开关,如。

./script -A ABLOCK #executes only ABLOCK
./script -A ABLOCK -B BBLOCK #executes ABLOCK and BBLOCK
./script -V  # just an option for say verbose output

其中ABLOCK,BBLOCK,CBLOCK可以是参数列表argv

1 个答案:

答案 0 :(得分:2)

为什么不:

foreach arg $argv {
    $arg
}

并将其作为./script ABLOCK BLOCK CBLOCK

运行

有人也可以通过exit,如果您不想要,请检查它是否有效:

foreach arg $argv {
    if {$arg in {ABLOCK BLOCK CBLOCK}} {
        $arg
    } else {
        # What else?
    }
}

对于开关,您可以使用相同的(如果它们不需要参数):

proc -V {} {
    set ::verbose 1
    # Enable some other output
}

如果需要切换参数,可以执行以下操作:

set myargs $argv
while {[llength $myargs]} {
    set myargs [lassign $myargs arg]
    if {[string index $arg 0] eq {-}} {
       # Option
       if {[string index $arg 1] eq {-}} {
           # Long options
           switch -exact -- [string range $arg 2 end]
               verbose {set ::verbose 1}
               logfile {set myargs [lassign $myargs ::logfile]}
           }
       } else {
           foreach opt [split [string range $arg 1 end] {}] {
               switch -exact $opt {
                   V {set ::verbose 1}
                   l {set myargs [lassign $myargs ::logfile]}
               }
           }
       }
    } else {
        $arg
    }
}