我正在尝试做一个切换蓝牙连接的 Alfred 工作流程。
STATUS=$(/usr/local/bin/blueutil status)
if [ $STATUS == "on" ]
then
/usr/local/bin/blueutil off
echo "off"
else
/usr/local/bin/blueutil on
echo "on"
fi
我在这里做错了什么?
它什么也不做。
答案1
我猜是blueutil
写入STDERR
而不是STDOUT
。在这种情况下,将前者合并到后者,同时捕获 的输出blueutil
。
STATUS=$(/usr/local/bin/blueutil status 2>&1)
此外,你想看看输出包含 on
,因此不要这样:
if [ $STATUS == "on" ]
说:
if [[ $STATUS == *on ]]
而是为了匹配所需的字符串。
答案2
blueutil 现在的工作方式略有不同,其状态返回为“1”或“0”,而不是单词。下面是一个切换蓝牙状态的脚本,希望它能帮助其他通过谷歌进入此页面的人:
#!/bin/bash
STATE=$(/usr/local/bin/blueutil -p)
((STATE ^= 1))
/usr/local/bin/blueutil -p $STATE
是^=
按位异或相等运算符,它将变量在 0 和 1 之间翻转。