期望脚本在 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
我有调用 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