# 如何在编译时专心摸鱼


编译，是软件开发中一个让人又爱又恨的环节。追求开发效率的团队，通常会选择能快速编译或者无须编译的语言，省下的时间能开发更多功能迭代，做更多测试。最近一年多的时间，我重拾 C++，做起了数据库内核开发，等待编译成了我的日常功课。

<!-- more -->

![](https://p.ipic.vip/ispp9f.jpg)

通常我会在等待编译的时候，起身走走，或者切换窗口干点别的事情。但是这一切换，再切回来的时间就比较玄学了。如果编译的终端窗口没被遮挡，那还是有一定几率在编译完成后不久被发现，然后继续干活，如果窗口被遮挡了就不好说了。

如果能有一个机制，在编译完成之后，给我推送一个通知就好了。

如果都在 macOS 上工作，推送通知还是挺简单的，执行一下 osascript 命令就好了。

```bash
osascript -e 'display notification "message" with title "title" subtitle "subtitle"'
```

但是我的主要工作环境是在服务器上，平时都用的 CLion 远程开发，需要构建时直接在终端里 make 一下。如果能从服务器上给 macOS 推个通知就好了。

其实这事也好办。

服务器能远程登录我的 macbook，那就 ssh 上来执行 osascript。我在 macbook 上给服务器配置了免密登录。

用了一会之后，我感觉这样似乎不太安全，我的 macbook 暴露了。

如果不从服务器推，那就得从 macbook 拉了。如果我在编译结束时往一个文件写入内容，怎么从 macbook 发现文件被更新了呢？如果我写了个 bash 脚本，感知远程文件更新，怎么优雅地运行它，不要占用终端窗口呢？

我想到了 Automator。之前我还用了它来把 PDF 转换成黑底白字的模式，我也算是老手了。

![](https://p.ipic.vip/fd2hry.jpg)

就是这么简单！等待和循环用 automator 来做，比较一下远程文件的修改时间，如果这次和上次的时间不一样，就把内容通知出来。

如此一来，我就可以在编译的时候专心摸鱼，编译完成了系统会提醒我哒~


