【问题标题】:pick multiple password using expect script使用期望脚本选择多个密码
【发布时间】:2017-07-21 16:25:30
【问题描述】:

这是我的脚本:

set pwfl [open "/home/arul/Arul/BPGrep/Rest/Test/p1" r]
set pswd [split [read "$pwfl"] "\n"]
foreach pw \$pswd
log_file [exec date]_Int_Push_FTP.log
spawn ftp oc0151528004 21
set timeout 30
expect "Name (*:*):" {send "arul\r\n"}
expect "*assword:" {send "$pw\r\n"}
expect "ftp>" {send "bye\r\n"}
expect "ftp>" {send "exit\r\n"}

并得到这样的错误:

错误的#args: 应该是“foreach varList list ?varList list ...? 命令” 执行时

“foreach pw \$pswd”(文件“Int_Push_FTP_11Jul.expect”第 4 行)

【问题讨论】:

    标签: bash ftp expect


    【解决方案1】:

    要解决您眼前的问题:

    foreach pw $pswd {
        log_file ...
        ...
        expect "ftp>" {send "exit\r"}
        expect eof
    }
    

    您没有向foreach 提供command 参数

    代码审查的其他几点:

    • 不要转义 $pswd 变量:这导致的不是列表内容,而是文字字符串
      $pswd
    • 您只需要在发送命令中使用\r 来“回车”,而不是\r\n
    • 这种读取文件行的​​方法将产生一个带有尾随空元素的列表。

      • 假设文件中的最后一个字符是换行符(任何行为良好的文本文件都应该如此),那么
      • 当您在换行符上拆分文件内容时,尾随换行符后面的空字符串将成为最后一个列表元素。
      • 因此您获得了一次额外的循环迭代,您尝试发送一个空密码。
      • 要克服这个问题,要么:

        set pswd [split [read -nonewline $pwfl] \n]
        

        while {[gets $pwfl pw] != -1} {
            # your foreach loop  body here
        }
        
    • 别忘了close $pwfl

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 2015-12-20
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2018-07-05
      相关资源
      最近更新 更多