【问题标题】:Getting error in expect for loop在期望循环中出现错误
【发布时间】:2011-09-07 10:49:34
【问题描述】:

期待脚本“testscript2”:

#!/usr/bin/expect 设置主机列表 [打开 ./host_list] 设置 ipaddrs [读取 $hostlist] foreach 行 [拆分 $ipaddrs \n] { spawn scp id_dsa.pub root@$line:~/.ssh 设置通行证“abc123” 预计 { “是/否” {发送“是\r”} 密码:{发送“$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: : 名称或服务未知 失去了连接

正如您在上面看到的那样,传输发生了,但在 host_list 中没有更多服务器名称后,for 循环会额外重复一次。我认为发生的事情是最后一次 for 循环迭代它看到 exp_continue 语句,并且由于 host_list 中没有更多的服务器名称,它会引发该错误。因此是“root@:~”。

【问题讨论】:

    标签: expect


    【解决方案1】:

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

    if {$line == ""} continue

    【讨论】:

    • 哇太棒了,让我试一试:)
    • Brian,如果这个答案解决了您的问题,您应该将其标记为“已接受”。
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多