Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Guard::Shell automatically run shell commands when watched files are modified.
Ruby
branch: master

This branch is even with hawx:master

v0.7.1

latest commit 0a8e1f5d14
@hawx hawx authored
Failed to load latest commit information.
lib/guard v0.7.1
spec add specs
.gitignore ignore Gemfile.lock
.rspec add basic rspec setup
Gemfile add basic rspec setup
LICENSE Initial commit
Rakefile add basic rspec setup
Readme.md README mistyped quote fix. Closes #6
guard-shell.gemspec use guard-compat

Readme.md

Guard::Shell

This little guard allows you to run shell commands when files are altered.

Install

Make sure you have guard installed.

Install the gem with:

gem install guard-shell

Or add it to your Gemfile:

gem 'guard-shell'

And then add a basic setup to your Guardfile:

guard init shell

Usage

If you can do something in your shell, or in ruby, you can do it when a file changes with guard-shell. It simply executes the block passed to watch if a change is detected, and if anything is returned from the block it will be printed. For example

guard :shell do
  watch /.*/ do |m|
    m[0] + " has changed."
  end
end

will simply print a message telling you a file has been changed when it is changed. This admittedly isn't a very useful example, but you hopefully get the idea. To run everything on start pass :all_on_start to #guard,

guard :shell, :all_on_start => true do
  # ...
end

There is also a shortcut for easily creating notifications,

guard :shell do
  watch /.*/ do |m|
    n m[0], 'File Changed'
  end
end

#n takes up to three arguments; the first is the body of the message, here the path of the changed file; the second is the title for the notification; and the third is the image to use. There are three (four counting nil the default) different images that can be specified :success, :pending and :failed.

Examples

Saying the Name of the File You Changed and Displaying a Notification

guard :shell do
  watch /(.*)/ do |m|
    n m[0], 'Changed'
    `say -v cello #{m[0]}`
  end
end

Rebuilding LaTeX

guard :shell, :all_on_start => true do
  watch /^([^\/]*)\.tex/ do |m|
    `pdflatex -shell-escape #{m[0]}`
    `rm #{m[1]}.log`

    count = `texcount -inc -nc -1 #{m[0]}`.split('+').first
    msg = "Built #{m[1]}.pdf (#{count} words)"
    n msg, 'LaTeX'
    "-> #{msg}"
  end
end

Check Syntax of a Ruby File

guard :shell do
  watch /.*\.rb$/ do |m|
    if system("ruby -c #{m[0]}")
      n "#{m[0]} is correct", 'Ruby Syntax', :success
    else
      n "#{m[0]} is incorrect", 'Ruby Syntax', :failed
    end
  end
end
Something went wrong with that request. Please try again.