This is a short post to illustrate how I use the inotifywait command as a cheap and cheeful way to run my tests automatically on save.
Note: inotify is only available on linux, sorry OS X users.
Step 1. Install inotify-toolsOn Debian/Ubuntu, inotifywait and friends live in the inotify-tools package.
% sudo apt-get install inotify-toolsIf you live in an RPM universe the package name will hopefully be similar.
Step 2. Create a helper functionRemembering the full inotifywait incantation can be taxing, so save yourself some effort and define a function in .bashrc (or your shell of choice’s startup script).
watch() { while inotifywait --exclude .swp -e modify -r .; do $@; done; }If you use /usr/bin/watch frequently, you might want to pick another name for this function.
Step 3. Run a command on saveUsing tmux (you do use tmux, right?), split the window an run
% watch go test .Any time that a file in the current working directory is modified, inotifywait will return, which runs the command you provided, then loops back around.
watch will trigger on a modification to anything in the current working directory or below it. The command that runs when inotifywait detects a modification can be anything you like. For example you could be working in one package inside your project, and have watch watch rebuild all the commands any time you save, like this:
% cd $GOPATH/src/github.com/you/yourproject/pkg/pkg/pkg% watch go install -v github/com/you/yourproject/cmd/...