Wie gehe ich mit Unterbefehlszeilen in Shell-Skripten um?

Wie gehe ich mit Unterbefehlszeilen in Shell-Skripten um?

Ich bin neu bei Linux und arbeite an einem Bluetooth Low Energy-Projekt mit dem Intel Edison. Auf dem Edison läuft Yocto 1.6.1. Ich habe Bluz und gatttool verwendet, um meinen BLE-Sensor anzuschließen. Aber ich muss jedes Mal, wenn ich eine Verbindung herstellen möchte, denselben Befehl eingeben. Deshalb möchte ich ein Shell-Skript schreiben und es automatisch ausführen lassen, wenn ich die Platine hochfahre.

Im Terminalfenster gebe ich diesen Befehl ein:

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

Dann springt es zu [D2:AD:9F:B7:BB:60][LE]> und dann gebe ich "connect" ein.

[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

Wie kann ich "[D2:AD:9F:B7:BB:60][LE]>" in meinem Shell-Skript verarbeiten? Ich kann "connect" nicht direkt eingeben. Das funktioniert nicht.

#!/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

Antwort1

Das expectTool sollte tun, was Sie wollen.

Es wird mitgeliefert autoexpect, das ein Expect-Skript erzeugt, indem es eine Ihrer interaktiven Sitzungen „beobachtet“. Führen Sie es aus autoexpect, führen Sie dann alles aus, was Sie in Ihrer normalen Shell tun würden, und beim Beenden der Shell erhalten Sie eine Datei, script.expdie Sie dann als Grundlage verwenden können.

verwandte Informationen