【问题标题】:expect error in bash expression期望 bash 表达式中的错误
【发布时间】:2012-10-11 08:36:23
【问题描述】:

我在我的 bash 脚本中使用了以下期望命令,以设置无密码 ssh 连接。

VAR=$(expect -c '
     spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP "'   
     expect "*?assword:*"
     send "'"$REMOTE_HOST_PASSWD"'\r";
     expect { 
     "Permission denied, please try again." {
        exit '"$WRONG_PASSWORD"' 
     }
 }
 ')

我期望密码字符串为“?assword:”以便发送密码。但是无论我为期望块写什么它都有效。如果我写

expect "xxxx"
expect "yyyy"

它也有效,所以我认为它没有进入那个块?。解决方案是什么

【问题讨论】:

    标签: bash ssh expect


    【解决方案1】:

    可能是在进行匹配之前,它已到达 Steam 结束或发生超时。即使没有找到匹配项,expect 也会返回并继续执行,发送密码。

    在期望手册中,在COMMAND 下,我们有一个部分解释了expect 命令:

    waits until one of the patterns matches the output of a spawned process, a
    specified time period has passed, or an end-of-file is seen.
    

    要解决这个问题,您应该将发送代码放在期望的正文中:

    VAR=$(expect -c '
         spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP "'   
         expect "*?assword:*" {
           send "'"$REMOTE_HOST_PASSWD"'\r"
         }
         expect { 
         "Permission denied, please try again." {
            exit '"$WRONG_PASSWORD"' 
         }
     }
     ')
    

    希望这会有所帮助 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      相关资源
      最近更新 更多