Linux
树莓派3B 采用Samba + Cockpit搭建NAS
Linux 修改开机启动 boot splash logos
Linux 下将 .po 文件编译成 .mo 文件
Python 使用 gettext 模块实现国际化
XFCE 桌面优化配置
香橙派3B 使用 WiringOP 读取 MPU6050
香橙派4 LTS 安装 WiringPi
Linux 图形界面切换到 FB 界面
校表仪 tg-timer 算法笔记
Linux 安装 EtherCat Igh
EetherCat Igh 常用指令
树莓派镜像 DIY 制作
树莓派5B 安装64位实时系统 preempt RT 补丁
linux 的 lightdm 桌面管理器下隐藏光标(鼠标)
Linux 上使用 MPD (Music Player Daemon)
Linux 自动化交互式命令行工具 —— expect
Linux GTK 界面开发
Debian系统中修改主机名
使用Python + GTK3.0 开发嵌入式GUI
Raspberry Pi 5修改系统内存分页大小解决安装esp-matter 出现的<jemalloc>: Unsupported systeom page size 错误
树莓派 linux 安装和使用clash 做VPN
树莓派自动挂载硬盘
非控制台或ssh登录用户尝试启动Xorg图形服务器
XFCE4 电源管理器配置管理
Linux PulseAudio 声卡配置和检测
IBUS修改输入法和设置切换快捷键
在 Moode Audio 中实现开机自动启动 `startx`
crontab 任务
树莓派外设耗电检测
linux 终端自动登录
linux创建新用户
linux service通过xinit启动GTK应用程序
Linux 非桌面的图形环境安装和配置
香橙派3b板载音频输出没有声音调试
使用 udev 规则修改权限实现屏幕亮度调节
Linux udev 介绍
鲁班猫4 ubuntu22.04 屏幕背光 udev 自动配置化
ubuntu22.04 动态壁纸配置
使用 udisksctl 的可靠 USB 自动挂载方案(基于 systemd-run)
通过udev规则U盘自动挂载
OpenWRT 磊科N60pro路由器刷机
本文档使用 MrDoc 发布
-
+
首页
Linux 自动化交互式命令行工具 —— expect
`expect` 是一个用于自动化交互式命令行工具的工具。它通过模拟用户输入和响应,可以与需要交互的命令行程序(如 `bluetoothctl`、`ssh`、`ftp` 等)进行自动化交互。 --- ### **`expect` 的核心功能** 1. **自动化交互**: - 可以自动向命令行程序发送输入(例如密码、命令等)。 - 可以根据程序的输出(例如提示符、错误信息等)做出响应。 2. **脚本化操作**: - 将复杂的交互过程编写成脚本,实现自动化任务。 3. **超时处理**: - 可以设置超时时间,避免程序卡住。 4. **条件判断**: - 根据程序的输出内容,执行不同的操作。 --- ### **`expect` 的基本用法** `expect` 脚本通常包含以下部分: 1. **`spawn`**:启动需要交互的命令行程序。 2. **`expect`**:等待程序的特定输出。 3. **`send`**:向程序发送输入。 4. **`interact`**:将控制权交还给用户,允许手动交互。 #### 示例:自动化 SSH 登录 以下是一个使用 `expect` 自动化 SSH 登录的示例脚本: ```bash #!/usr/bin/expect # 启动 SSH 连接 spawn ssh user@hostname # 等待密码提示 expect "password:" # 发送密码 send "your_password\r" # 将控制权交还给用户 interact ``` 运行此脚本后,`expect` 会自动输入密码并完成 SSH 登录。 --- ### **`expect` 在蓝牙脚本中的作用** 在你提供的蓝牙管理脚本中,`expect` 用于自动化 `bluetoothctl` 的交互过程。例如: - 自动发送 `scan on` 和 `scan off` 命令。 - 自动处理配对和连接过程中的交互。 #### 示例:扫描蓝牙设备 以下是脚本中用于扫描蓝牙设备的 `expect` 代码片段: ```bash expect <(cat <<EOF log_user 0 set timeout -1 match_max 100000 spawn bluetoothctl expect "*# " send "menu scan\r" expect "*# " send "clear\r" expect "*# " send "transport bredr\r" expect "*# " send "back\r" expect "*# " send "scan on\r" expect "Discovery started\r" expect "*# " sleep $SCAN_DURATION send "scan off\r" expect "Discovery stopped\r" expect "*# " send "quit\r" expect eof EOF ) ``` 这段代码的作用是: 1. 启动 `bluetoothctl`。 2. 进入扫描菜单并设置扫描模式为 BR/EDR。 3. 开始扫描并等待指定时间(`SCAN_DURATION`)。 4. 停止扫描并退出 `bluetoothctl`。 --- ### **安装 `expect`** 在大多数 Linux 发行版中,`expect` 可以通过包管理器安装。 #### 在 Debian/Ubuntu/Raspbian 上安装: ```bash sudo apt update sudo apt install expect ``` #### 在 CentOS/RHEL 上安装: ```bash sudo yum install expect ``` #### 在 macOS 上安装(使用 Homebrew): ```bash brew install expect ``` --- ### **`expect` 的常用命令** | 命令 | 描述 | |---------------|----------------------------------------------------------------------| | `spawn` | 启动一个交互式程序。 | | `expect` | 等待程序的特定输出。 | | `send` | 向程序发送输入。 | | `interact` | 将控制权交还给用户,允许手动交互。 | | `set timeout` | 设置超时时间(单位为秒)。 | | `exp_continue`| 继续匹配下一个 `expect`,而不是退出当前块。 | | `exit` | 退出 `expect` 脚本。 | --- ### **`expect` 的优势** 1. **自动化复杂任务**: - 可以自动化需要多次交互的任务,例如 SSH 登录、蓝牙配对等。 2. **减少人工干预**: - 避免手动输入重复的命令或响应。 3. **灵活性**: - 支持条件判断、循环和超时处理,适用于各种复杂的交互场景。 --- ### **`expect` 的局限性** 1. **依赖于程序输出**: - 如果程序的输出格式发生变化,`expect` 脚本可能会失效。 2. **不适合图形界面**: - `expect` 主要用于命令行工具,无法直接处理图形界面程序。 3. **调试复杂**: - 对于复杂的交互逻辑,调试 `expect` 脚本可能会比较困难。 --- ### **总结** `expect` 是一个强大的工具,特别适合用于自动化需要交互的命令行任务。在你的蓝牙管理脚本中,`expect` 用于自动化 `bluetoothctl` 的交互过程,例如扫描设备、配对和连接。如果系统中未安装 `expect`,可以通过包管理器安装: ```bash sudo apt install expect ``` 安装后,重新运行脚本即可。如果有其他问题,请随时告诉我!
qingkai
2025年1月26日 17:39
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码