期待脚本“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 @:〜”。
答案 0 :(得分:2)
如果host_list文件以换行符结尾,则[split]将为空的最后一行提供额外的元素。要跳过此步骤,请尝试在spawn命令之前添加以下行:
if {$line == ""} continue