如何处理shell脚本中的子命令行?

如何处理shell脚本中的子命令行?

我是 Linux 新手,正在使用 Intel Edison 做一个低功耗蓝牙项目。 Edison 上有 Yocto 1.6.1。我使用 Bluz 和 gatttool 连接我的 BLE 传感器。但每次需要连接时,我都需要输入相同的命令。所以我想写一个shell脚本,让它在我启动板子时自动运行。

在终端窗口中,我输入以下命令:

rfkill unblock bluetooth
hciconfig hci0
export PATH=$PATH:~/bluez-5.24/attrib/
gatttool -b D2:AD:9F:B7:BB:60 -I -t random

它跳转到 [D2:AD:9F:B7:BB:60][LE]> 然后我输入“connect”

[D2:AD:9F:B7:BB:60][LE]> connect
Attempting to connect to D2:AD:9F:B7:BB:60
Connection successful
[D2:AD:9F:B7:BB:60][LE]> char-write-req 0x000e 0100

当我编写shell脚本时,如何在脚本中处理“[D2:AD:9F:B7:BB:60][LE]>”?我不能直接输入“连接”。这是行不通的。

#!/bin/sh
rfkill unblock bluetooth
hciconfig hci0
export PATH=$PATH:~/bluez-5.24/attrib/
gatttool -b D2:AD:9F:B7:BB:60 -I -t random
conncet
char-write-req 0x000e 0100

答案1

expect工具应该做你想做的事。

它附带了autoexpect通过“观看”您的交互式会话来生成预期脚本的功能。运行autoexpect,然后执行您在常规 shell 中执行的所有操作,退出 shell 后您将获得文件script.exp,您可以将其用作基础。

相关内容