免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3470 | 回复: 15
打印 上一主题 下一主题

[文本处理] tcl 求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-18 09:43 |只看该作者 |倒序浏览
本帖最后由 rdcwayx 于 2014-02-18 10:24 编辑

有一个SubmitJob.exp 的expect脚本,内容如下:
  1. #!/usr/bin/expect

  2. proc SubmitJob {usr machine} {

  3. spawn su $usr
  4. expect  {
  5. "Password:"  {send "$pword\r"}
  6. }
  7. expect {
  8. "$usr" {send "rsh $machine\r"}
  9. }
  10. expect {
  11. "$usr@$machine" {send "cd $lpa_run_dir/$mvsversion_lpa/$buildnum_lpa\r"}
  12. }
  13. expect {
  14. "$usr@$machine" {send "pwd\r"}
  15. }
  16. expect {
  17. "$usr@$machine" {send "cat submit.csh.$usr\r"}
  18. }
  19. expect {
  20. "$usr@$machine" {send "exit\r"}
  21. }
  22. expect {
  23. "$usr" {send "exit\r"}
  24. }
  25. expect eof
  26. }
复制代码
基本上就是指定 usr和machine,然后su usr , rsh到machine,之后到固定目录 cat 下 submit.csh.$usr 文件 (这个文件时总脚本产生的)

然后再总脚本里面 source 上面的 SubmitJob.exp

总脚本里有如下定义
  1. switch [llength $acc_use_real] {
  2.                  1 {
  3.                    SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
  4.                    }
  5.                  2 {
  6.                    SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
  7.                    SubmitJob [lindex $acc_use_real 1] [lindex $machine_list 1]
  8.                    }
  9.                  3 {
  10.                    SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
  11.                    SubmitJob [lindex $acc_use_real 1] [lindex $machine_list 1]
  12.                    SubmitJob [lindex $acc_use_real 2] [lindex $machine_list 2]
  13.                    }
  14.                  4 {
  15.                    SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
  16.                    SubmitJob [lindex $acc_use_real 1] [lindex $machine_list 1]
  17.                    SubmitJob [lindex $acc_use_real 2] [lindex $machine_list 2]
  18.                    SubmitJob [lindex $acc_use_real 3] [lindex $machine_list 3]
  19.                    }
  20.           }
复制代码
machine_list 为4台机器名组成的list, acc_use_real为长度1-4不定的一个账号的list
奇怪的地方出现了:

当[llength $acc_use_real] 分别为2,3,4的时候,一切正常,会su 到相应的usr 然后rsh到后面的machine,然后cat相应的Submit.csh.$usr文件(会在stdout输出文件内的内容)
但是!!!当[llength $acc_use_real] 为1的时候,会在终端显示cat submit.csh.tom(比如此时我用的usr为tom),类似 > cat submit.csh.tom 但是,stdout不会输出submit.csh.tom文件里面的内容....求助大侠...为了验证cat submit.csh.tom到底执行了没有,我把cat 改成了rm, 运行脚本的时候会  出现是否删除文件的确认请求,说明 rm还是执行了,但为什么当acc_use_real 长度为1的时候cat不能输出到终端呢? 好郁闷 {:3_186:}

论坛徽章:
0
2 [报告]
发表于 2014-02-18 10:01 |只看该作者
回复 1# b4and5

我又试着把cat 改成cp submit.csh.$usr submit.csh.$usr.bak
结果当acc_use_real为1的时候,虽然会产生一个 submit.csh.$usr.bak, 但是这个文件为空文件
当acc_use_real为2,3,4的时候,也会产生相应的 submit.csh.$usr.bak 而且这个文件时好的,同submit.csh.$usr内容相同....
好奇怪啊,都是一样的exp脚本在处理这个,为什么会酱紫.....{:3_185:}

   

论坛徽章:
0
3 [报告]
发表于 2014-02-18 10:27 |只看该作者
回复 2# b4and5

改成while循环也还是没用,跟switch的结果是一样的

set w [expr [llength $acc_use_real] -1]

          while {$w >=0} {
            SubmitJob [lindex $acc_use_real $w] [lindex $machine_list $w]
            set w [expr $w-1]
           }

大侠救我.....{:3_201:}     

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-02-18 11:18 |只看该作者
我实在没明白你要做什么事.

不过, 你有 expect 完全没有必要. 根本不需要 su $user 这一步, 可以直接 ssh usr@host 就行了.

另外, 也不建议使用 rsh .

论坛徽章:
0
5 [报告]
发表于 2014-02-18 14:14 |只看该作者
回复 4# q1208c

这里的cat只是用来debug的,将来肯定不可能大费周章的su,然后rsh到一台机器上就为了cat下一个文件的...本来是想执行submit.csh的那个脚本的...

奇怪的是 switch的2,3,4都好好的,就1不能正常运行....

   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
6 [报告]
发表于 2014-02-18 14:35 |只看该作者
回复 5# b4and5

我建议你把相关的 "值" 打出来看看, 说不定不是你想的结果呢.
   

论坛徽章:
0
7 [报告]
发表于 2014-02-18 14:52 |只看该作者
回复 6# q1208c

打过了,都是我想要的....真想当面给你说具体什么情况啊....太诡异了

   

论坛徽章:
0
8 [报告]
发表于 2014-02-18 14:58 |只看该作者
回复 6# q1208c

就好像你在终端里 cat 一个文件,然后回车
没有任何错误信息提示,但也不显示文件的内容,直接跳到下一个提示符.......
{:3_201:}
   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
9 [报告]
发表于 2014-02-18 15:06 |只看该作者
回复 7# b4and5

刚刚发现, 你用的是什么shell ?

bash 里好象没有 switch 语句 . 只有 case.

难道你用的是 csh ?
   

论坛徽章:
0
10 [报告]
发表于 2014-02-18 15:15 |只看该作者
回复 9# q1208c

用的tclsh...
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP