SimpleShell

A very simple, yet safe and sturdy wrapper around your shell.

gives you stdout

shell = SimpleShell.new()
res = shell.ls
res.out
=> a_file
b_file
c_file

gives you stderr

res = shell.ls("/path/not/exists")
res.err
=> "ls: cannot access /path/not/exists: No such file or directory"

gives you exit value

res.S?
=> #<Process::Status: pid 20743 exit 2>
shell.S?
=> #<Process::Status: pid 20743 exit 2>

gives you stdin

res = shell.sendmail("you@yourdomain.com") do |pipe|
  pipe.puts message
end

is tied to it’s location

shell = SimpleShell.new("/tmp")
shell.ls
=> # ... contents of tmp
shell.chdir "/home"
Errno::ENOENT:
Dir.chdir("/home")
shell.ls
=> # ... still, contents of tmp

provides you with a sub shell for location shifts

commands = shell.in("/home") do |sub|
  sub.ls
  sub.mkdir("joe")
end
commands.count
=> 2
commands.last.S?
=> #<Process::Status: pid 20760 exit 1>

lets you specify the environment

shell = SimpleShell.new(Dir.pwd, { 'MY_ENV' => 'my env' })
shell.do "echo ${MY_ENV}"
=> 'my env'

Provides parameter escaping

shell = SimpleShell.new(Dir.pwd, { 'MY_ENV' => "You wont see me" })
shell.echo '${MY_ENV}'
=> '${MY_ENV}'

shell.ls "-la", "/path/to/list"
=> total 87694
=> drwxr-xr-x 106 john   doe       45056 Jan 15 08:43 ./
=> ...

Contributing to SimpleShell

Copyright © 2012 Hartog C. de Mik. See LICENSE.txt for further details.