Expect是一个用于自动化交互式应用程序的工具,如登录、文件传输等
- 使用
spawn
命令启动交互式程序:
spawn
例如,要启动SSH会话,可以使用:
spawn ssh user@example.com
- 使用
expect
命令等待特定的字符串出现:
expect ""
当Expect脚本检测到指定的字符串时,它将自动发送相应的命令。例如,要等待SSH登录提示符(通常是$
或%
),可以使用:
expect "$"
- 使用
send
命令发送命令到交互式程序:
send "\r"
\r
是回车符,用于模拟用户按下Enter键。例如,要输入用户名,可以使用:
send "username\r"
- 使用
interact
命令进入交互模式:
interact
在交互模式下,用户可以直接与交互式程序进行交互,而无需脚本干预。要退出交互模式,可以按Ctrl+C
两次。
- 使用
close
命令关闭当前交互式程序:
close
- 使用变量和循环处理输出:
Expect支持使用变量和循环来处理输出。例如,要存储命令的输出到一个变量中,可以使用
lindex
命令:
set output [lindex $expect_out(buffer) 0]
要循环处理输出,可以使用while
循环:
while {$output ne ""} { # 处理输出的逻辑 set output [lindex $expect_out(buffer) 0] }
这是一个简单的Expect脚本示例,用于自动登录SSH服务器并执行命令:
#!/usr/bin/expect set timeout 20 set username [lindex $argv 0] set password [lindex $argv 1] set command [lindex $argv 2] spawn ssh $username@example.com expect "$ " send "$password\r" expect "$ " send "$command\r" expect "$ " interact
要运行此脚本,请将其保存为auto_ssh.exp
,并确保它具有可执行权限(使用chmod +x auto_ssh.exp
)。然后,可以通过以下方式运行脚本:
./auto_ssh.exp username password "command"