我正在尝试编写一个简单的 shell 脚本,使我的树莓派的蓝牙可被发现,但我遇到了一些问题。我的树莓派运行的是 Raspbian。
通过命令行运行它效果很好:
coproc bluetoothctl
echo -e 'discoverable on' >&${COPROC[1]}
但是当我创建 shell 脚本时执行以下操作:
#! /bin/bash
coproc bluetoothctl
echo -e 'discoverable on' >&${COPROC[1]}
使用命令行“bash test_script.sh”,脚本正确执行,但蓝牙的状态保持不变。
有人可以帮我吗?谢谢!
答案1
bluetoothctl
一旦完成,您的脚本就会退出并终止echo
,这意味着bluetoothctl
可能没有足够的时间来完成它的事情。协进程很可能由于PIPE
在尝试将某些内容写入标准输出(由脚本退出而关闭)时接收到信号而退出。
您在这里有两个选择(很可能更多):
等待协同进程完成后再终止脚本。您可以在
wait "$COPROC_PID"
脚本结束之前执行此操作。这将导致脚本一直运行,直到bluetoothctl
通过其他方式终止(例如,您可以quit
使用第二个 向其发送命令echo
)。只需将字符串
bluetoothctl
直接通过管道传输到:echo discoverable on | bluetoothctl
或者,使用此处字符串
bluetoothctl <<<'discoverable on'
这将导致
bluetoothctl
在执行命令后终止。脚本在bluetoothctl
完成后终止。