在循环中获得错误

时间:2011-06-02 22:42:24

标签: expect

期待脚本“testscript2”:

#!/usr/bin/expect
set hostlist [open ./host_list]
set ipaddrs [read $hostlist]

foreach line [split $ipaddrs \n] {

        spawn scp id_dsa.pub root@$line:~/.ssh
        set pass "abc123"
        expect {
        "yes/no" {send "yes\r"}
        password: {send "$pass\r"; exp_continue}
                  }
}

上述工作除外,这些恼人的错误确实对文件传输的结果没有影响:

./testscript2
spawn scp id_dsa.pub root@lsvm-nagios1:~/.ssh
id_dsa.pub 100% 20 0.0KB/s 00:00
spawn scp id_dsa.pub root@:~/.ssh
ssh: : Name or service not known
lost connection

正如您在上面看到的那样,传输发生但是在host_list中没有更多服务器名称之后,for循环再次迭代一次。我认为发生的事情是,for循环的最后一次迭代它会看到exp_continue语句,因为host_list中没有更多的服务器名称,它会抛出该错误。因此“root @:〜”。

1 个答案:

答案 0 :(得分:2)

如果host_list文件以换行符结尾,则[split]将为空的最后一行提供额外的元素。要跳过此步骤,请尝试在spawn命令之前添加以下行:

if {$line == ""} continue