A Ruby replacement for bash+ssh, providing both an interactive shell and a library. Manage both local and remote unix systems from a single client.

gem install rush3 -v 3.0.0


rush – manage your unix systems with pure Ruby

rush is a unix integration library and an interactive shell which uses pure Ruby syntax. Walk directory trees; create, copy, search, and destroy files; find and kill processes - everything you'd normally do with shell commands, now in the strict and elegant world of Ruby.



gem install rush3

Or for the bleeding edge:

git clone git://
cd rush
gem build *.gemspec
gem install *.gem

If you want the development version, you will need the development headers for ruby (eg. ruby-dev in most package managers) and change that last command to:

git clone git://
cd rush
bundle install     # to get the dependencies
rake spec          # to run the tests
rake rdoc          # to generate a local copy of the docs from your sourcetree (optional)

rake install  # install your default gem location

To uninstall

gem uninstall rush3


Count the number of classes in your project using bash:

find myproj -name \*.rb | xargs grep '^\s*class' | wc -l

In rush, this is:


Pesky stray mongrels? In bash:

kill `ps aux | grep mongrel_rails | grep -v grep | cut -c 10-20`

In rush:

processes.filter(:cmdline => /mongrel_rails/).kill

As a library

require 'rubygems'
require 'rush'

file = Rush['/tmp/myfile']
file.write "hello"
puts file.contents

puts Rush.processes.size
puts Rush.bash("echo SHELL COMMAND | tr A-Z a-z")
puts Rush.launch_dir['*.rb'].search(/Rush/).entries.inspect

Invoking the shell

Run the “rush” binary to enter the interactive shell.

Remote access and clustering

rush can control any number of remote machines from a single location. Copy files or directories between servers as seamlessly as if it was all local.

Example of remote access:

local ='localhost')
remote ='')
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }


local_dir ='localhost')['/Users/adam/server_logs/'].create
servers = %w(www1 www2 www3).map { |n| }
servers.each { |s| s['/var/log/nginx/access.log'].copy_to local_dir["#{}_access.log"] }


For more details on syntax and commands, see:

  • Rush

  • Rush::Entry

  • Rush::File

  • Rush::Dir

  • Rush::Commands

  • Rush::Box

  • Rush::Process


What follows is the meta from the original project, which is no longer maintained. The mailinglist was hosted by Google groups, which is no more. Link included for posterity:

The previous maintainer archived their repository. The new website for this fork is:

Created by Adam Wiggins

Patches contributed by Chihiro Ito, Gabriel Ware, Michael Schutte, Ricardo Chimal Jr., and Nicholas Schlueter, Pedro Belo, and Martin Kuehl

Logo by James Lindenbaum

Previously maintained by Sergei Smagin. Now maintained by James Dunn. Ask me if something is unclear:

Released under the MIT License: