我试图让我的期望脚本读取文件,为文件的每一行运行命令并退出保存日志。代码如下:
#!/usr/bin/expect -f
set user [lrange $argv 0 0]
set password [lrange $argv 1 1]
set ipaddr [lrange $argv 2 2]
set arg1 [lrange $argv 3 3]
set systemTime [clock seconds]
set time [clock format $systemTime -format %a_%b_%d_%Y@%H'%M'%S]
set fp [open "$arg1" r]
set a "ssh-"
set b ".txt"
set s "_"
append newfile "${a}${arg1}${s}${time}${b}"
set timeout -1
spawn ssh $user@$ipaddr
match_max 100000
expect "*?assword:*"
send -- "$password\r"
log_file "$newfile" ;
expect "*#"
send_user "This is the $argv0 Script\r"
while {[gets $fp line] != -1} {
send -- "scm $line\r"
expect "*#"
}
close
send -- "exit\r"
expect eof
我的问题是,一旦到达文件末尾,我会收到以下错误:
E6000_Lab_1# send: spawn id exp7 not open
while executing
"send -- "exit\r""
(file "filetest.tcl" line 28)
有人可以帮我摆脱这个错误吗?
答案 0 :(得分:1)
很抱歉这样做,但似乎我再次得到了asnwer。
非常感谢所有回答并为解决这些问题提供一些想法的人。
我的问题的解决方案是在已打开的文件的ID上。一旦我关闭它,我的代码停止崩溃,snipet在下面:
while {[gets $fp line] != -1} {
send -- "scm $line\r"
expect "*#"
}
close $fp
send "ping xxx.xxx.xxx.xxx timeout 1 repeat-count 100\r"
expect "# "
send -- "exit\r"
expect eof
正如您所看到的,“close”参数之后的“$ fp”允许我将下一个命令发送出循环而没有错误。
答案 1 :(得分:0)
在send
与子流程的连接后,您无法执行expect
或close
。