自动化¶
Expect¶
前置知识:CLI 原理¶
要理解 Expect 的工作原理,我们必须深入了解几个终端知识:tty、pty。
- TeleTYpewriter:原指电传打字机,接收键盘输入并打印输出的设备,位于 
/dev/tty*。 - Pseduo-TTY:伪终端,
- 由内核创建的一对设备,有主端(master)和从端(slave)。
 - slave 看起来像一个真正的 TTY 设备,shell 等程序将其作为输入输出。位于 
/dev/pts/N。 - master 由终端模拟器,如 xterm、ssh、Expect 使用,用于与用户交互并转发数据。通过 
/dev/ptmx动态创建。 
 
spawn¶
- stdin、stdout、stderr 均重定向到 Expect
 - 使用 
close关闭,或者进程自己退出 - 成功创建进程后设置变量 
spawn_id,并视为当前进程 - 
全局变量
user_spawn_id指向用户- 如果 
spawn_id = user_spawn_id,则命令作用于用户,如expect->expect_user 
 - 
返回 UNIX PID
 
send¶
默认发送到变量 spawn_id,可以用 -i 指定发送到特定 spawn_id。
expect¶
close¶
关闭到进程的连接。大部分交互式进程会检测到 EOF 并退出。
expect 和 interact 会自动检测当前进程退出,并隐式执行 close。但如果使用 exec kill 等方式关闭,则需要手动 close。
-onexec:执行新spawn时,是否应该关闭当前的spawn_id。0保留。默认不保留。
不论以什么方式执行 close,都应当再调用 wait 等待进程结束。
wait¶
-i-nowait