Bash脚本回声但不会执行

时间:2016-03-22 16:04:33

标签: bash

我正在创建一个简单的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

2 个答案:

答案 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