Como lidar com sub-linha de comando no shell script?

3

Eu sou novo no Linux e estou fazendo um projeto de baixa energia Bluetooth usando o Intel Edison. O Edison tem um Yocto 1.6.1 nele. Eu usei Bluz e gatttool para conectar meu sensor BLE. Mas preciso digitar o mesmo comando sempre que quiser uma conexão. Então eu quero escrever um script de shell e deixá-lo rodar automaticamente quando eu inicializar a placa.

Na janela do terminal, eu digito estes comandos:

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

O salto para [D2: AD: 9F: B7: BB: 60] [LE] > e então eu digito "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

Quando eu escrevo o shell script, como posso lidar com "[D2: AD: 9F: B7: BB: 60] [LE] >" no meu roteiro? Eu não posso colocar "conectar" diretamente. Não vai funcionar.

#!/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
    
por chenglin 12.02.2016 / 09:12

1 resposta

1

A ferramenta expect deve fazer o que você deseja.

Ele vem com autoexpect , o que produzirá um script esperado "assistindo" a uma sessão interativa sua. Execute autoexpect , então faça tudo o que você faria em seu shell normal e, ao sair do shell, você obterá o arquivo script.exp , que poderá usar como base.

    
por 12.02.2016 / 12:59