期望脚本不适用于多个密码请求
Posted
技术标签:
【中文标题】期望脚本不适用于多个密码请求【英文标题】:Expect script does not work with multiple password requests 【发布时间】:2021-02-06 19:25:41 【问题描述】:我正在尝试执行一个 perl 脚本以连接到 linux 主机生成一个快照,然后我需要将此快照 SCP 到我的本地服务器。所以我必须输入密码 2 次 1 - 登录服务器和 2 - SCP 先前生成的文件。 问题是,我的期望脚本只适用于第一个密码,有人知道吗?
[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
语句的组织。密切注意大括号和双引号。
看看我的sexpect (Expect for Shells),您可以使用它来编写仅使用shell 代码的Expect 脚本。
【参考方案1】:
首先,在将期望脚本放入 bash 脚本时使用引用的 heredoc,它可以显着减少引用地狱。
看来你需要输入密码,然后等待perl程序结束:
-
在同一个期望命令中放置多个模式
使用特殊的
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
【讨论】:
完美格伦!!非常感谢您的帮助!!以上是关于期望脚本不适用于多个密码请求的主要内容,如果未能解决你的问题,请参考以下文章
Scapy/ARP 请求不适用于多个/范围 IP。仅针对单个 IP 请求
多个 CORS 适用于 GET 但不适用于 PUT/POST 与飞行前请求 Web api 2