如何在期望中进行for循环,运行遍历文件中的所有行

how to make a for loop in expect, run trough all lines in a file

我正在尝试使用 expect 制作一个 sftp 登录脚本,我想要一个文件,其中包含我想要连接的每个 remote.host 的 IP 地址。 我如何创建一个 for 函数以期望遍历 ip 地址文件中的每一行并使其变量假定每一行中的字符串。 我目前的代码是

set filehandle [open /home/logs r]
while {[gets $filehandle line] != -1} {
spawn sftp user@$filehandle
sleep 1
expect "*password:" [send "password/r"]
sleep1
expect "*" [send "get /home/holder/r"]
sleep 1
expect "*" [send "bye/r"]}


i get the following response
```spawn sftp user@server
user@server´s password: spawn sftp user@server
user@server´s password: user@hostname:/home/user

您混淆了 shell 并期望:for ...; do ...; done 是 shell 语法

你想要:

set filehandle [open /home/logs r]
while {[gets $filehandle line] != -1} {
    spawn sftp user@$line
    # ...
}
close $filehandle

Expect 是Tcl 语言的扩展。您可能想查看 Tcl 教程:https://tcl.tk/man/tcl8.5/tutorial/tcltutorial.html