Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1253193
  • 博文数量: 168
  • 博客积分: 3483
  • 博客等级: 中校
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 13:17
文章分类

全部博文(168)

文章存档

2015年(6)

2014年(9)

2013年(47)

2012年(11)

2011年(13)

2010年(18)

2009年(11)

2008年(42)

2007年(11)

分类: 项目管理

2015-01-15 12:30:07

想用tcl重写之前的一些shell工具,但是发现tcllib里面cmdline包的getoptions只支持tcl风格的选项
  />
  1. package require cmdline
  2.  
  3. # Show argv before processing
  4. puts "Before, argv = '$argv'"
  5.  
  6. # Process the command line
  7. set parameters {
  8.     {server.arg "" "Which server to test"}
  9.     {port.arg 5551 "Port to send test cmd"}
  10.     {user.arg "" "Login name"}
  11.     {debug "Output extra debug info"}
  12. }
  13. array set arg [cmdline::getoptions argv $parameters]
  14.  
  15. # Verify required parameters
  16. set requiredParameters {server user}
  17. foreach parameter $requiredParameters {
  18.     if {$arg($parameter) == ""} {
  19.         puts stderr "Missing required parameter: -$parameter"
  20.         exit 1
  21.     }
  22. }
  23.  
  24. # Displays the arguments
  25. puts ""
  26. parray arg
  27. puts ""
  28.  
  29. # Show argv after processing
  30. puts "After, argv = '$argv'"

加了一个补丁(), 但用着还是不太理想
自己动手写了一个,兼容GNU getopt风格的getOpt tcl lib,附件中的包解压到/usr/local/lib/下, 然后具体用法如下:

  1. #!/bin/sh
  2. # Jianhong Yin <yin-jianhong@163.com>
  3. # -*- tcl -*-
  4. # The next line is executed by /bin/sh, but not tcl \
  5. exec tclsh "$0" ${1+"$@"}

  6. lappend auto_path /usr/local/lib
  7. package require getOpt 1.0
  8. namespace import ::getOpt::*

  9. # global var
  10. array set Opt {}
  11. array set InvalidOpt {}
  12. set NotOptions [list]
  13. set OptionList {
  14.         f {arg y help {#Specify a test list file}}
  15.         listf {link f}
  16.         cc {arg m help {#Notify additional e-mail address on job completion}}
  17.         kcov {arg n help {#insert kcov task for do the kernel test coverage check}}
  18.         kdump {arg o help {#insert kdump task for get core dump file if panic happen}}
  19. }

  20. # getUsage test
  21. puts "Usage: $argv0 \[options\]"
  22. puts "Option list:"
  23. getUsage $OptionList

  24. # _parse_ argument
  25. getOptions $OptionList $::argv Opt InvalidOpt NotOptions
  26. parray Opt
  27. parray InvalidOpt
  28. puts "NotOptions: $NotOptions"

代码 />
阅读(7750) | 评论(0) | 转发(0) |
0

上一篇:sqlite 学习中 draft

下一篇:Tcl/Tk 发展史

给主人留下些什么吧!~~