シェルスクリプトでサブコマンドラインを処理するにはどうすればいいですか?

シェルスクリプトでサブコマンドラインを処理するにはどうすればいいですか?

私は Linux 初心者で、Intel Edison を使用して Bluetooth Low Energy プロジェクトを行っています。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には、対話型セッションを「監視」して expect スクリプトを生成する が付属しています。 を実行しautoexpect、通常のシェルで行うすべての操作を実行すると、シェルを終了すると、script.expベースとして使用できるファイルが作成されます。

関連情報