自动化¶
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