如何从期望脚本中终止脚本

How to terminate script from within expect script

我有一个 expect 脚本,它通过 ssh 连接到服务器以验证它使用的密码是否正确。但是,如果它检测到密码不正确,虽然它会停止 expect 命令,但它会继续执行脚本的其余部分。

代码如下 - 我的问题是我们可以在失败案例(密码不正确)中放入什么命令(如果有的话)并让它终止脚本,这样它就不会继续执行其余功能好像密码是正确的。

expect <<-EOS
        #!/usr/bin/expect
        log_user 0
        set timeout $EXP_TIMEOUT
        puts "\nValidating Password...\n"
        spawn ssh -q -o ConnectTimeout=$SSH_TIMEOUT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${hostname}
        expect "*assword*"
        send -- "$secret\r"
        expect {
                "*assword*" {
                        send \x03
                        puts "\nIncorrect Password\n"
                }
                "$prompt" {
                        send -- "exit\r"
                        puts "\nPassword Validated\n"
                }
        }
        expect eof
EOS

如有任何帮助,我们将不胜感激!

编辑:我正在使用 bash。上面粘贴的代码是整个 bash 脚本中的一个函数。

您使用的是什么编码语言?对于许多语言,有一个简单的代码可以退出应用程序,例如 C# 中的 this.Exit() 或 python 中的 exit()

我将以下内容添加到我的代码中,它似乎有效。如果有人有任何批评,请随时告诉我可以改进的地方。

期待命令:

expect <<-EOS
        #!/usr/bin/expect
        log_user 0
        set timeout $EXP_TIMEOUT
        puts "\nValidating Password...\n"
        spawn ssh -q -o ConnectTimeout=$SSH_TIMEOUT -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${hostname}
        expect "*assword*"
        send -- "$secret\r"
        expect {
                "*assword*" {
                        send \x03
                        puts "\nIncorrect Password\n"
                        exit 1
                }
                "$prompt" {
                        send -- "exit\r"
                        puts "\nPassword Validated\n"
                }
        }
        expect eof
        exit 0
EOS

父级 Bash 脚本:

if [ $? == 1 ] 
then 
echo "Password validation failed. Exiting..."
exit
fi