My personal favorite for watching files and running context sensitive commands is to use the lovely filewatcher CLI utility written in Ruby. 1gem install filewatcher 2gem install filewatcher-cli This can then be used with: 1filewatcher '**/*.js' 'node $FILENAME' However this hasn’t been updated in a while now and fails on newer versions of Ruby. So now I use watchexec. 1cargo install watchexec-cli 2watchexec -w source/f2py 'make html'