这是我的剧本:
set pwfl [open "/home/arul/Arul/BPGrep/Rest/Test/p1" r]
set pswd [split [read "$pwfl"] "\n"]
foreach pw \$pswd
log_file [exec date]_Int_Push_FTP.log
spawn ftp oc0151528004 21
set timeout 30
expect "Name (*:*):" {send "arul\r\n"}
expect "*assword:" {send "$pw\r\n"}
expect "ftp>" {send "bye\r\n"}
expect "ftp>" {send "exit\r\n"}
得到这样的错误:
错误#args:应该是“foreach varList list?varList list ...? 命令” 执行时
“foreach pw \ $ pswd”(文件“Int_Push_FTP_11Jul.expect”第4行)
答案 0 :(得分:0)
解决您的紧急问题:
foreach pw $pswd {
log_file ...
...
expect "ftp>" {send "exit\r"}
expect eof
}
您未向command
foreach
参数
其他一些代码审核点:
$pswd
变量:这导致的不是列表内容,而是文字字符串\r
来"点击输入"在发送命令中,而不是\r\n
这种读取文件行的方法将产生一个带有尾随空元素的列表。
要克服这个问题,要么:
set pswd [split [read -nonewline $pwfl] \n]
或
while {[gets $pwfl pw] != -1} {
# your foreach loop body here
}
close $pwfl