8.17. Expect-5.45.4

Expect 软件包包含通过脚本控制的对话,自动化 telnetftppasswdfsckrlogin,以及 tip 等交互应用的工具。Expect 对于测试这类程序也很有用,它简化了这类通过其他方式很难完成的工作。DejaGnu 框架是使用 Expect 编写的。

估计构建时间: 0.2 SBU
需要硬盘空间: 3.9 MB

8.17.1. 安装 Expect

Expect 需要伪终端 (PTY) 才能正常工作。进行简单测试以验证 PTY 是否在 chroot 环境中正常工作:

python3 -c 'from pty import spawn; spawn(["echo", "ok"])'

该命令应该输出 ok。如果该命令反而输出 OSError: out of pty devices,说明 PTY 在当前环境无法正常工作。此时需要退出 chroot 环境,再次阅读第 7.3 节 “准备虚拟内核文件系统”,并确认 devpts 文件系统 (以及其他虚拟内核文件系统) 已被正确挂载。之后按照第 7.4 节 “进入 Chroot 环境”重新进入 chroot 环境。在继续构建之前,必须解决这一问题,否则需要使用 Expect 的测试套件 (例如 Bash,Binutils,GCC,GDBM 等的测试套件,当然还有 Expect 本身的测试套件) 都会出现大规模的测试失败,而且也可能产生其他隐蔽的问题。

对该软件包进行一些修改,以允许使用 gcc-14.1 或更新版本构建它:

patch -Np1 -i ../expect-5.45.4-gcc14-1.patch

准备编译 Expect:

./configure --prefix=/usr           \
            --with-tcl=/usr/lib     \
            --enable-shared         \
            --disable-rpath         \
            --mandir=/usr/share/man \
            --with-tclinclude=/usr/include

配置选项的含义:

--with-tcl=/usr/lib

需要使用该选项告知 configure 配置脚本 tclConfig.sh 的位置。

--with-tclinclude=/usr/include

该选项显式指定查找 Tcl 内部头文件的位置。

构建该软件包:

make

运行命令以测试编译结果:

make test

安装该软件包:

make install
ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib

8.17.2. Expect 的内容

安装的程序: expect
安装的库: libexpect5.45.4.so

简要描述

expect

根据一个脚本与其他交互程序交流

libexpect-5.45.4.so

包含一些函数,使得 Expect 可以作为 Tcl 扩展使用,也可以直接在 C 或 C++ 中使用 (不使用 Tcl)