Как обрабатывать подкомандную строку в скрипте оболочки?

Как обрабатывать подкомандную строку в скрипте оболочки?

Я новичок в Linux и делаю проект Bluetooth Low energy с использованием Intel Edison. На Edison установлен Yocto 1.6.1. Я использовал Bluz и gatttool для подключения моего датчика BLE. Но мне нужно вводить одну и ту же команду каждый раз, когда я хочу подключиться. Поэтому я хочу написать скрипт оболочки и запустить его автоматически при загрузке платы.

В окне терминала я ввожу следующие команды:

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

Когда я пишу скрипт оболочки, как мне обработать "[D2:AD:9F:B7:BB:60][LE]>" в моем скрипте? Я не могу напрямую вставить "connect". Это не сработает.

#!/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, затем сделайте все то, что вы бы сделали в вашей обычной оболочке, и после выхода из оболочки вы получите файл, script.expкоторый затем можете использовать в качестве основы.

Связанный контент