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 程序结束:
- 将多个模式放在同一个 expect 命令中
- 使用特殊的
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
我正在尝试执行一个 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 程序结束:
- 将多个模式放在同一个 expect 命令中
- 使用特殊的
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