vagrantからterminal-notifierに通知飛ばす。

前回guardでいい感じに自動テスト環境セットアップしたけど、あれ?terminal-notifierもvagrantから通知できなくね?ということで、またしてもググってみたところ、おぉ神よ。
vagrant-notify+terminal-notifierでvagrantからローカルに通知をする - Qiita

terminal-notifierは既に入ってる前提なので、なかったらbrewで入れてください。

$ brew install terminal-notifier

これでポップアップが出ればOK。

$ echo 'Piped Message Data!' | terminal-notifier -sound default

次に手元のMac側でvagrant-notifyというvagrantのpluginを入れる。

$ vagrant plugin install vagrant-notify
Installing the 'vagrant-notify' plugin. This can take a few minutes...
Installed the plugin 'vagrant-notify (0.4.0)'!

vagrantで仮想サーバ起動しっぱなしだったら一回再起動しておく。

$ vagrant halt
$ vagrant up

次に、手元のMac側でnotify-sendというコマンドをシェルで作る。

$ vi /usr/local/bin/notify-send
$ cat /usr/local/bin/notify-send
#!/bin/bash

terminal-notifier -title "$2" -message "$3" -sound default

$ chmod u+x /usr/local/bin/notify-send

まずは手元のMacで稼働確認。ポップアップ出た。

$ notify-send title message

次にvagrant側から実行していみる。vagrant側のnotify-sendコマンドはCentOS6.5だとデフォで入ってた。

$ ssh xxxx
Last login: Tue Feb 17 11:35:36 2015 from 10.0.2.2
[vagrant@localhost ~]$ notify-send title message

これでvagrantから手元のMacに通知できた。

次に、先ほどのMac側で作ったシェルを編集して、guardからキックできるようにする。

$ vi /usr/local/bin/notify-send
$ cat /usr/local/bin/notify-send
#!/bin/bash
while getopts t:h:i:u:i:c: OPTION
do
  case $OPTION in
    t) TIME=$OPTARG;;
    h) ;;
    i) IMAGE=$OPTARG;;
    u) ;;
  esac
done
shift `expr $OPTIND - 1`
MESSAGE=$*
terminal-notifier -title "$1" -message "$MESSAGE" -contentImage "$IMAGE" -sound default

この状態でvagrant上でguardを動かすと、ちゃんと手元のMacにポップアップで通知できるようになった。