- 论坛徽章:
- 0
|
本帖最后由 rdcwayx 于 2014-02-18 10:24 编辑
有一个SubmitJob.exp 的expect脚本,内容如下:- #!/usr/bin/expect
- proc SubmitJob {usr machine} {
- spawn su $usr
- expect {
- "Password:" {send "$pword\r"}
- }
- expect {
- "$usr" {send "rsh $machine\r"}
- }
- expect {
- "$usr@$machine" {send "cd $lpa_run_dir/$mvsversion_lpa/$buildnum_lpa\r"}
- }
- expect {
- "$usr@$machine" {send "pwd\r"}
- }
- expect {
- "$usr@$machine" {send "cat submit.csh.$usr\r"}
- }
- expect {
- "$usr@$machine" {send "exit\r"}
- }
- expect {
- "$usr" {send "exit\r"}
- }
- expect eof
- }
复制代码 基本上就是指定 usr和machine,然后su usr , rsh到machine,之后到固定目录 cat 下 submit.csh.$usr 文件 (这个文件时总脚本产生的)
然后再总脚本里面 source 上面的 SubmitJob.exp
总脚本里有如下定义- switch [llength $acc_use_real] {
- 1 {
- SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
- }
- 2 {
- SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
- SubmitJob [lindex $acc_use_real 1] [lindex $machine_list 1]
- }
- 3 {
- SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
- SubmitJob [lindex $acc_use_real 1] [lindex $machine_list 1]
- SubmitJob [lindex $acc_use_real 2] [lindex $machine_list 2]
- }
- 4 {
- SubmitJob [lindex $acc_use_real 0] [lindex $machine_list 0]
- SubmitJob [lindex $acc_use_real 1] [lindex $machine_list 1]
- SubmitJob [lindex $acc_use_real 2] [lindex $machine_list 2]
- SubmitJob [lindex $acc_use_real 3] [lindex $machine_list 3]
- }
- }
复制代码 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:} |
|