问题的背景
因此,我正在开发一个小型 posix shell 脚本,该脚本旨在围绕蓝牙进行,并且由于我正在考虑将其“发布”给公众,因此我正在优化它并稍后与其他人共享代码,以便我可以对其进行审查。
问题
我获取与主机配对的每个蓝牙设备(即运行此 shell 脚本的设备)的方式是:
busctl tree org.bluez > $tempfile
while read mac; do
t=$(echo "${mac##*/dev_}"| grep -v "└─/org")
a=${t%%/*}
#Discard repeats due to there being "sub-adresses"
if [ -z "$a" ] || [ "$a" != "$t" ]; then
continue;
fi
#There's other code running here
done < $tempfile
然后在循环中使用对象名称,我只是使用它们来返回它们的地址,以及其他我不会详细介绍的属性,就像这样
c=$(busctl get-property $SERVICE $OBJ_TEMPLATE"$a" $INTERFACE Address)
c=${c##s }
# will return something like " 00:00:00:dd:33:22"
这在很大程度上是无用的,因为从我所看到的 busctl 树给出的对象名称,格式化后,对应于它将从属性回复的内容address
事情是我害怕由于 busctl 部分或设备部分的某种损坏,它们可能不匹配,两者仍然可以正常工作,但前提是我将对象名称视为别名而不是固定的通用固定命名约定
exe:在执行 busctl 树时,它会回复其中一行:├─/org/bluez/hci0/dev_00_00_00_00_B5_C8
但 get-property 将返回s 22:33:21:25:AA:B4