期望循环不起作用

时间:2013-11-26 16:06:39

标签: for-loop sh expect

我无法弄清楚循环的预期效果如何。

我有我的代码:

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上循环无限次。

1 个答案:

答案 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是一个值。 setincr是两个这样的命令。你必须写

for {set  j 0} {$j < 5} {incr  j 1} {
# .......^....................^
#       no $                no $