1

如何使“期望”程序的发送命令从文件中读取并使用每一行作为参数。

我想在期望程序中使用类似循环的结构,如下所示(注意:-while 循环是虚构的。)

spawn /my/program

expect {
 -re EBtxjjmEcQTxc0SLd4TdXxjUduxCOLZBwEme2Z.*password: { 
             while read_line in FILE; 
             do 
                 send $read-line; 
             done 
}

如何使用“expect”对等价的while循环部分进行编程

4

1 回答 1

4

请注意,在您的问题中,您缺少一个右括号,并且您输入了错误的变量名(read_lineread-line

Expect 是 Tcl 扩展,因此您可以使用所有Tcl命令

spawn /my/program
expect { 
    -re EBtxjjmEcQTxc0SLd4TdXxjUduxCOLZBwEme2Z.*password: { 
        set fh [open FILE r]
        while {[gets $fh read_line] != -1} {
            send "$read_line\r"
        } 
        close $fh
    }
}

如果你安装tcllib,你可以做

package require fileutil
spawn /my/program
expect { 
    -re EBtxjjmEcQTxc0SLd4TdXxjUduxCOLZBwEme2Z.*password: { 
        fileutil::foreachLine read_line FILE {
            send "$read_line\r"
        } 
    }
}
于 2012-12-26T18:26:32.310 回答