Raspberry PiのBluetoothを検索可能にするために単純なシェルスクリプトを作成しようとしたところ、いくつかの問題が発生しました。私のRaspberry PiはRaspbianを実行しています。
コマンドラインから実行すると正常に動作します。
coproc bluetoothctl
echo -e 'discoverable on' >&${COPROC[1]}
ただし、次のことを行うシェルスクリプトを作成するとき:
#! /bin/bash
coproc bluetoothctl
echo -e 'discoverable on' >&${COPROC[1]}
"bash test_script.sh"コマンドラインを使用すると、スクリプトは正しく実行されますが、Bluetoothステータスは変更されません。
誰でも私を助けることができますか?ありがとうございます!
答え1
bluetoothctl
完了すると、スクリプトは終了して終了します。これは、タスクを完了するのに十分な時間がないことをecho
意味します。標準出力に何かを書き込もうとすると、信号の受信によってbluetoothctl
補助プロセスが終了した可能性が高くなります(スクリプトの終了により終了しました).PIPE
これには2つのオプションがあります(おそらくそれ以上)。
スクリプトを終了する前に、コルーチンが完了するのを待ちます。
wait "$COPROC_PID"
スクリプトが終了する前にこれを行うことができます。これにより、別の方法で終了するまでスクリプトが実行されます(たとえば、2番目の方法を使用してコマンドを送信bluetoothctl
できます)。quit
echo
bluetoothctl
文字列を次に直接パイプするだけです。echo discoverable on | bluetoothctl
またはこの文字列を使用してください。
bluetoothctl <<<'discoverable on'
これにより、
bluetoothctl
コマンドの実行後に終了します。bluetoothctl
完了すると、スクリプトは終了します。