Every repository with this icon (
Every repository with this icon (
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Thu Nov 20 18:16:26 -0800 2008 | |
| |
README.rdoc | Sat Feb 07 14:14:20 -0800 2009 | |
| |
Rakefile | Mon Aug 17 16:45:45 -0700 2009 | |
| |
VERSION | Tue Nov 10 17:36:54 -0800 2009 | |
| |
bin/ | Thu Mar 27 15:09:15 -0700 2008 | |
| |
lib/ | Tue Nov 10 14:15:04 -0800 2009 | |
| |
rush.gemspec | Tue Nov 10 17:36:54 -0800 2009 | |
| |
spec/ | Tue Nov 10 14:15:04 -0800 2009 |
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







