Today Scripts 是一个能够在通知中心运行 bash 脚本并输出结果的小工具。你可以利用它查看系统信息、性能数据、资源占用,阅读 RSS,管理服务器。只要是能用终端命令输出结果的东西,你都可以用它来实现。而且还是免费的。

想必很多人都用过 iStat menus,因为需要在菜单栏上显示,会占用本来就很挤的菜单栏空间,如果不需要实时监控的话,就可以选择用本工具在通知中心里面做同样的工作。而且,通知中心小工具只有在显示出来的时候才会占用系统资源。

有些同学可能知道,这款软件最初运行在 OS X 10.10 上,少数派曾在 2014 年末发布过 推荐文。由于未知原因,原作者 SamRothCA 没有提供对新系统的适配,导致在 OS X 10.11 更新之后软件报废,后由 lsd 发布了针对 10.11 的适配版本。进入 macOS 时代之后,苹果修改了通知中心的设计风格,导致没有适配的 Widget 显示不协调。于是我自己修改代码对新系统做了适配,现在你已经可以在 macOS 10.12 上正常使用本软件了。

前后对比

基础使用

想要在 Today Scripts 中添加脚本,只要点击右上角的「i」,然后点添加脚本。

添加脚本

上面你可以输入脚本的标题和调用的程序(默认会选择系统当前使用的 shell)。没什么特殊需求的话,在中间的框中输入 bash 脚本之后点击「添加脚本」即可。注意需要按 Tab 键在文本框之间移动光标。(Shift + Tab 可以反方向移动)

  • Run automatically:如果取消勾选则不会自动运行脚本。你需要在脚本标题上点击鼠标才会输出结果。可以利用这个选项做一些点击执行的快捷工具。
  • Show status indicator:一般添加的脚本会在标题左侧显示一个表示运行状态的小灯,取消勾选则不会显示。

配合 iStats 的温度监控

想必你已经用过一些温度监控工具了,这里介绍一种结合命令行工具 iStats 的实现。

效果图

首先安装 iStats。使用 gem install iStats直接安装。安装后在终端运行 istats 就可以显示结果。

之后你只需要在 Today Scripts 里面添加一个内容为 /usr/local/bin/istats 的脚本就行了。默认会显示 CPU 温度、风扇状态和电池状态。接下来我会介绍一下自定义显示数据的方法。

在终端输入 istats scan 检索已有的温度传感器,程序会列出一堆知道干嘛和不知道干嘛的温度信息。

你可以从中选择你需要的加入,用 istats enable xxx 即可。比如我想加入最后一个 AirPort 的温度,就要输入 istats enable TW0P 。之后你就可以在 Extra Stats 分类下看到刚刚加入的传感器了。

如果你只想在通知中心看到一部分数据,可以在 Today Scripts 中使用例如 /usr/local/bin/istats cpu 、/usr/local/bin/istats battery 等来限定内容,注意前面必须使用 iStats 的绝对路径,更多命令可以在终端中输入 istats help 来查看。

系统信息

在 Today Scripts 的 wiki 中,作者给出了一些比较好用的小脚本。复制粘贴就好了。

  • 五个占用 CPU 最高的程序

ps xro %cpu=,comm= | while read cpu comm; ((i++<5)); do echo $cpu% $(basename "$comm"); done

  • 五个占用内存最高的程序
ps xmo rss=,pmem=,comm= | while read rss pmem comm; ((n++<5)); do
size="$[rss/1024]";
short=$[4-${#size}];
size="(${size}M)";
i=0;
while ((i++ < short)); do size=" $size"; done;
pmem="${pmem%%.*}"
if   (($pmem >= 20)); then color=$'\e[31m';
elif (($pmem >= 10)); then color=$'\e[33m';
else                       color=$'\e[32m ';
fi;
echo "$color$pmem% $size $(basename "$comm")"$'\e[0m'"";
done
  • 磁盘占用状况
df -Hl | {
  read keys;
  keys="${keys%% on}";
  while read ${keys//%}; do
    echo "`basename "$Mounted"` - $Used/$Size ($Capacity)";
  done
}
  • 网络信息

这个脚本我做了一点修改,改进了排版并加入了公网 IP。

echo -e "Local IP:\c"
ipconfig getifaddr en0
echo -e "Gateway:\c"
netstat -rn | grep default | grep en0 | awk '{print $2}'
echo -e "Public IP:\c"
curl icanhazip.com

Git 相关

  • 指定 Repo 的状态
cd ~/path/to/repo && git status --short
  • 带分支信息的指定 Repo 状态
cd ~/path/to/repo && git status --short --branch
  • 指定 Repo 的最后一次提交
cd ~/path/to/repo && git log --abbrev-commit --date=relative -1
  • Finder 中现在打开的 Repo 信息(感觉这个最实用)
cd "$(osascript -e 'tell application "Finder" to get the POSIX path of (target of front window as alias)')" && git status --short --branch

运行非 Bash 脚本

除了运行默认的 bash 脚本之外,我们还可以运行一些其他语言的脚本。只需要在添加脚本时把调用的程序改成对应的可执行文件即可,注意是绝对目录。

  • Python:/usr/bin/python
  • Ruby:/usr/bin/ruby
  • Apple Script:/usr/bin/osascript(Tip:在 Apple Script 中可以使用 log 语句向控制台输出文本)

是不是可以做的事情更多了?

后记

除了上面介绍的用法,Today Scripts 能干的事情还有很多,各位可以自由发挥想象。通知中心自从进入 Mac 之后使用率就并不高,开发者也较少跟进,这使其进入了一种类似 Dashboard 的尴尬局面。希望这个 App 能拯救你的通知中心。

下载链接:直接下载 项目页面

参考链接


本文题图背景照片作者:@昭和摄影师南田一树