Expect 脚本不适用于多个密码请求

Expect script does not work with multiple password requests

我正在尝试执行一个 perl 脚本来连接到 linux 主机生成一个快照,然后我需要将这个快照发送到我的本地服务器。所以我必须输入密码 2 次 1 - 登录服务器和 2 - SCP 之前生成的文件。 问题是,我的 expect 脚本只适用于第一个密码,有人知道吗?

[linuxserver dimm]$ ./mul.sh
spawn perl perlscript.pl
Cleaning up /tmp/logs
Getting logs from server 9.x.x.x using snap
Password:  <------ THIS ITERATION WORKS FINE WITH EXPECT
Password:  <------ THE 2nd ITERATION DOES NOT WORK AND I HAVE TO ADD THE PASSWORD MANUALLY
[linuxserver dimm]$
    export PASSWORD='mypassword'

/usr/bin/expect -c '
    spawn perl perlscript.pl
    expect {
        -nocase "*assword*" {
            send "$env(PASSWORD)\r"
            exp_continue
        }
expect -c "
    expect "*assword*"
    send $env(PASSWORD)\r
    interact"
    }

interact
'

首先,在将 expect 脚本放入 bash 脚本时使用引用的 heredoc,它会显着减少引用地狱。

看来您需要输入密码,然后等待 perl 程序结束:

  1. 将多个模式放在同一个 expect 命令中
  2. 使用特殊的 eof 模式来期待衍生程序的结束。
/usr/bin/expect <<'END_EXPECT'
    set timeout -1
    spawn perl perlscript.pl
    expect {
        -nocase "*assword*" {
            send "$env(PASSWORD)\r"
            exp_continue
        }
        eof
    }
END_EXPECT