期望脚本在 bash 中不匹配

expect script not matching in bash

我有调用 expect 的函数,但是 expect 不匹配第二行,它匹配第一个匹配项,我试过各种想法,请帮忙

 function login_ssh_user {
    logger $FUNCNAME "start"
    if [ -z "${LDAPPWD}" ]; then
                            get_ldap_pwd
    fi

    echo "\n ${LDAPUSR} \n\n"
    echo "\n ${LDAPPWD} \n"
    echo "\n ${SOESYS}  \n"
    export U1="${LDAPUSR}"
    export S1="${SOESYS}"
    export P1="${LDAPPWD}"
    expect << EOF
            spawn ssh "$U1@$S1";
            expect "password:" { send $P1\r }
            expect  "$ " { send_user "Login Success ... PASS\n"; send exit\r }
            **expect  "denied" { send_user "Login Failure ... Fail\n";** send "^C" }
EOF
    logger $FUNCNAME "end"
}

您的代码表明您希望看到密码提示,然后您希望看到 shell 提示,然后您希望看到拒绝。显然,您将看到提示被拒绝的消息:

function login_ssh_user {
    #...
    export U1="${LDAPUSR}"
    export S1="${SOESYS}"
    export P1="${LDAPPWD}"
    expect << 'EOF'
            spawn ssh $env(U1)@$env(S1)
            expect "password:" { send $env(P1)\r }
            expect  {
                "$ "    { send_user "Login Success ... PASS\n"; send exit\r }
                denied" { send_user "Login Failure ... Fail\n"; send \x03 }
            }
EOF
    logger $FUNCNAME "end"
}

备注:

  • 我在重定向中引用了 EOF。这有效地单引号整个 expect 脚本主体
  • 您导出变量,因此 expect 可以从 env 数组中取出它们
  • shell 提示符和 "denied" 都是单个 expect 命令中的分支。谁先看到谁就会 "win".
  • Ctrl+C 为\x03