如何在bash变量中读取expect输出?

时间:2015-06-22 16:57:04

标签: bash expect

我使用expect tu验证ssh的密码。 我试图通过puts输出 但我只是在字符串中得到服务器响应的结束。

我如何只获得看跌期权值?

okk=$(expect -c "
set timeout 15
spawn ssh -p 22 user@server.com 
expect {
    \"(yes/no)\" {
        sleep 1
        send \"yes\n\"
        exp_continue
    }
    \"(y/n)\" {
        sleep 1
        send \"y\n\"
        exp_continue
    }
    password {
        sleep 1
        send \"$sshpw\r\"
        exp_continue
    }
    Password {
        sleep 1
        send \"$sshpw\r\"
        exp_continue
    }
    \"Last login\" {
        puts \"yes\"
        exit 1
    }
    \"Permission denied\" {
        return \"no\" 
        exit 1
    }
    timeout {
        puts \"timeout\"
        exit 1
    }
    eof {
        puts \"error\"
    }
}
sleep 1
expect eof
")

echo $okk

onsectetur。 Donec ut libero sed arcu vehicula ultricies a non tortor。 Lorem ipsum dolor坐下来,精致的adipistur elit。 Aenean ut gravida lorem。 Ut turpis felis,pulvinar a semper sed,adipiscing id dolor。 Pellentesque auctor nisi id magna consequat sagittis。 Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nis

1 个答案:

答案 0 :(得分:1)

除了puts的输出外,还需要进行两项更改:

  1. 使用spawn -noecho ssh -p 22 user@server.com

  2. log_user 0

  3. 之后添加set timeout 15

    警告:如果您遇到的情况不会在EXPECT世界中打印任何内容,您将在BASH世界中获得一个空字符串。所以,请注意这一点!