0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
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.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

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.

Usage¶ ↑

Count the number of classes in your project using bash:

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

In rush, this is:

myproj['**/*.rb'].search(/^\s*class/).lines.size

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
file.destroy

puts Rush.my_process.pid
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 = Rush::Box.new('localhost')
remote = Rush::Box.new('my.remote.server.com')
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 }

Clustering:

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

Reference¶ ↑

For more details on syntax and commands, see:

  • Rush

  • Rush::Entry

  • Rush::File

  • Rush::Dir

  • Rush::Commands

  • Rush::Box

  • Rush::Process

Meta¶ ↑

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

Released under the MIT License: www.opensource.org/licenses/mit-license.php

rush.heroku.com

groups.google.com/group/ruby-shell