Answers:
使用ioreg
和使用grep搜索电池
既然ioreg
很冗长-这是一个命令,可以简化为蓝牙设备的名称以及每个设备的所有电池百分比。
ioreg -l |egrep "BatteryPercent|Bluetooth Product Name"
在bmike [17年7月30日]的有用答案的基础上...通过进一步减少设备名称重复的方式:添加(a)符号克拉(^)表示行的开始,而(b)转义竖线之前和之后是特定数量的空格:
ioreg -r -l -n AppleHSBluetoothDevice | egrep '"BatteryPercent" = |^ \| "Bluetooth Product Name" = '
这些过滤器产生了以下结果:
| "Bluetooth Product Name" = "Magic Keyboard with Numeric Keypad"
| | "BatteryPercent" = 59
| "Bluetooth Product Name" = "Magic Mouse 2"
| | "BatteryPercent" = 98
使用sed进行更多过滤并回显该变量,得到了我一直在寻找的结果
BATTLVL=$(ioreg -r -l -n AppleHSBluetoothDevice | egrep '"BatteryPercent" = |^ \| "Bluetooth Product Name" = '| sed 's/ | "Bluetooth Product Name" = "Magic Mouse 2"/ \| Mouse:/' | sed 's/ | "Bluetooth Product Name" = "Magic Keyboard with Numeric Keypad"/ \| Keyboard:/'| sed 's/ | | "BatteryPercent" = / /'); echo $BATTLVL
控制台中的结果:
| Mouse: 96 | Keyboard: 71
但是,当我将其全部放入bash脚本文件中时,我发现虽然BATTLVL确实仅包含要报告的所需单词和短语,但它还包含换行符-但是,当ECHO命令被执行时它们不会出现。用分号附加到前面的命令中。
因此,为了进一步利用该报告的结果,我们会删除使用此建议的方法换行符后:
BATTRPT=${BATTLVL//[$'\t\r\n']}; # Strips all instances of tab, newline, return.
最后,要从bash脚本添加OS X关于鼠标和键盘电池电量的通知,发现有必要先将脚本字符串构建为变量,然后将其通过管道传递给osascript,以便在字符串中包含双引号。
theScript=$"display notification \"$BATTRPT\" "
echo $theScript | osascript