我无法弄清楚循环的预期效果如何。
我有我的代码:
j=0
/usr/bin/expect << SSHLOGIN
..........
for {set $j 0} {$j < 5} {incr $j 1} {
expect {
"*> " {
send "$j\r"
sleep 1
}
}
}
...........
SSHLOGIN
它会出现如下错误:
extra characters after close-brace
while executing
"for {set j 0}{ < 5}{incr 1} {
"
如果我在外面宣布j。循环只是卡在0并重复。我找不到有关for loop inside的任何信息。有人试过吗?
UPDATE:声明变量在外面,现在它在0上循环无限次。
答案 0 :(得分:2)
Expect是Tcl语言的扩展。 Tcl语法非常敏感。您没有在for
命令的参数之间提供空格
for {set j 0} {$j < 5} {incr j} {
#............^........^
请注意,incr
command需要变量 name ,而不是值。
花些时间与Tcl
man page一起了解Tcl的工作原理 - 这非常值得您花时间。
另外,我从您的问题中的错误消息中注意到$j
消失了。你是否正在调用像这样的shell脚本?
expect -c " ... your expect program here ..."
如果你是,请注意你必须在期望甚至开始之前保护expect的变量不被shell替换。如果可能的话,用单引号括住期望程序。
这样做:
/usr/bin/expect << 'SSHLOGIN'
引用here-doc终结符有效地引用了整个heredoc。否则,shell将把所有$variables
替换为之前的将程序交给期望。
某些Tcl命令采用变量 name 而不是值。 j
是变量名称。 $j
是一个值。 set
和incr
是两个这样的命令。你必须写
for {set j 0} {$j < 5} {incr j 1} {
# .......^....................^
# no $ no $