看天气、查汇率……让你的 Mac 菜单栏变成「万能工具箱」

提到生存在 macOS 菜单栏里面的小工具 , 我们就不得不提到 iStat Menu 这一应用 。强调「系统监控」的 iStat Menu , 其华丽的外表之下真正的工作原理是:每隔一段时间 , 执行一个程序 , 获取监控对象的各项数据 , 并将结果展示给我们看 。查看本机 CPU、内存等使用率 , 检测上传、下载速度等就是这一原理 , 查看天气、日程、月相、待办事项等同样也是这一原理 。

看天气、查汇率……让你的 Mac 菜单栏变成「万能工具箱」

文章插图
拥有丰富监控项目与样式的 macOS 菜单栏小工具界标杆:iStat Menu
既然都是「执行程序、获取数据」 , 那我们能不能直接不借助于付费的 iStat Menu , 用开源的解决方案来实现自己的 macOS 菜单栏小工具呢?当然可以 , BitBar 正是为此而生 。开源免费的 BitBar , 是专门为 macOS 菜单栏准备 , 能够将任何脚本、程序、代码的运行结果输出到菜单栏上面的应用 。几乎不需要任何动手能力 , 我们就能够用 BitBar 大致复刻 iStat Menu 的功能 。虽然可能做不到同样精致的界面 , 但单就功能上的实现 , BitBar 还是值得尝试的 。
安装运行BitBar 开源在 GitHub - matryer/bitbar , 我们可以直接到其 Release 页面 下载安装 macOS 版本的 BitBar 。使用 Homebrew 的同学当然可以用下面的命令安装 BitBar:
brew cask install bitbar安装成功之后 , 我们首次运行 BitBar 时 , BitBar 会要求我们指定一个「插件目录」 , 这里我们需要记住这一目录的位置 , 之后会频繁用到 。在正式开始安装插件、编写脚本之前 , 我们先来聊聊 BitBar 在华丽的外观背后 , 是如何具体运作的 。
工作原理纵观 BitBar 的工作原理 , 我们可以发现:实际上 BitBar 就是一个为监控系统执行的程序提供一个方便的输出环境 。前面提到的 BitBar 的「插件」安装目录(文件夹) , 其实际上就是所有 BitBar 需要执行的程序的本体所在 。在实际工作中 , BitBar 正是从这一目录下寻找可执行的程序 , 定时执行相应的程序 , 并根据程序输出将结果显示在我们 macOS 的菜单栏之中 。
看天气、查汇率……让你的 Mac 菜单栏变成「万能工具箱」

文章插图
BitBar 底层工作原理
我们用一个简单的例子来解释这一相对抽象的过程 —— 显示当前系统日期 。
日期在 macOS 上可以用简单的命令 date 来获取 , 打开终端(Terminal.App) , 输入 date 并回车 , 即可得到当前的系统时间、星期、日期、时区等等信息 。这里 , 命令 date 就是我们「系统监控」的程序本体 , 其类似 Mon Feb 3 00:54:14 CST 2020 的输出即为我们 BitBar 接收的脚本输出 , 最终 BitBar 即会将这一结果显示于 macOS 菜单栏上面 , 作为查看日期的「小工具」 。
看天气、查汇率……让你的 Mac 菜单栏变成「万能工具箱」

文章插图
使用命令 date 获取当前系统日期
当然 , 一个命令远远不够 , 我们需要将命令放在一个文件中 , 定义其运行方法 , 从而告诉 BitBar:每隔一段时间 , 用「这个方法」执行「这个文件」 , 就可以得到当前系统日期啦 。我们在刚刚给 BitBar 指定的「插件」安装目录下创建一个名称为 date.1s.sh 的文件 。这里 , 识别文件名就是 BitBar 设置程序运行方式的第一步 。文件名中:
  • date 即为文件的宽泛名称 , 程序的标识符
  • 1s 表示每隔 1s 执行一次本程序
  • sh 为文件后缀 , 这里表示此程序为一个 Shell 脚本程序 , 可以用 Bash 来运行
各个项目之间用 . 拼接起来 , 成为一个以 {文件名}.{执行频率}.{扩展名} 为格式的完整文件名 。我们打开这一文件 , 向其中填写如下的内容:
#!/bin/bashdate之后 , 如果我们保存文件 , 并重新加载 BitBar , 那么不出意外我们就可以看到 BitBar 的一个菜单栏项目开始生效:日期、星期、时间正确显示并每隔 1s 刷新一次 。
看天气、查汇率……让你的 Mac 菜单栏变成「万能工具箱」

文章插图
BitBar 每秒执行一次命令获取当前时间
我们看一下刚刚输入文件的内容:文件分为两行 , 第一行 #!/bin/bash 在程序界被称为 Shebang —— 表示程序执行方式 , 这里即为用 /bin/bash <文件名称> 的命令执行程序;第二行 date 即为执行程序输出结果的「命令」—— 获取当前日期 , 就在这里我们会获取到当前系统时间的输出 , 并将结果传递给 BitBar 显示于菜单栏上 。我们的第一个最为简单的 BitBar 小插件就算完成啦 。??


推荐阅读