我正在创建一个简单的bash脚本来从我的系统中删除所有蓝牙设备。它的作用是使用bt-device -l
列出蓝牙设备,然后在parens之间抓取MAC地址,然后调用bt-device -r <MACAddress>
删除设备。我在bash脚本中的表现并不是很好,但是当我用echo替换bt-device调用时,我得到了正确的输出。当我把命令放回去时说设备没有找到。如果我手动拨打电话(输出&#34;完成&#34;)。
bt-device -l
命令的示例输出:
Added Devices:
Samico BP (12:34:56:78:9a:bc)
SensorTag 2.0 (12:34:56:78:9a:bd)
我正在使用的剧本:
#!/usr/bin/env bash
bt-device -l | sed 1d |
while read x; do
bt-device -r $x | cut -d "(" -f2 | cut -d ")" -f1
done
当我运行它时,它会运行bt-device -r
命令,但输出为Error: Device not found
,就好像我输入错误的MAC地址一样。如果我用bt-device
替换脚本中的echo
调用,我会按预期获得MAC地址列表。
更新了脚本
#!/usr/bin/env bash
bt-device -l | sed 1d |
while read x; do
bt-device -r $(echo $x | cut -d "(" -f2 | cut -d ")" -f1)
done
答案 0 :(得分:2)
您希望在使用之前处理$x
:
bt-device -l | sed 1d |
while read x; do
dev=$( echo "$x" | cut -d "(" -f2 | cut -d ")" -f1 )
bt-device -r "$dev"
done
答案 1 :(得分:2)
问题是您在cut -d "(" -f2 | cut -d ")" -f1
的输出而不是参数上运行bt-device -r
。
相反,你应该写这样的东西:
bt-device -l | sed 1d | cut -d "(" -f2 | cut -d ")" -f1 |
while read x; do
bt-device -r $x
done