如何處理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,您可以將其用作基礎。

相關內容