Shell::Executer provides an easy and robust way to execute shell commands. The stdout and stderr data can be read completely after the execution or in chunks during the execution. If the data is processed in chunks this could be done by line or by char.

Command execution is done utilizing open4.

by Holger Kohnen

Download and Installation

You can download shell-executer from here or install it with the following command.

$ gem install shell-executer


You may use, copy and redistribute this library under the same terms as Ruby itself (see


require 'shell/executer.rb'

# execute and read standard output
Shell.execute('echo hello').stdout # => "hello\n"

# execute and read error output
Shell.execute('echo >&2 error').stderr # => "error\n"

# execute and check if the command exited with success
Shell.execute('ls /tmp').success? # => true
Shell.execute('ls /not_existing').success? # => false

# execute and process every line of output with block
Shell.execute('echo hello; echo world') {|stdout| print stdout }
# => "hello\n"
# => "world\n"

# execute and process every char of output with block
Shell.execute('echo 42', :mode => :chars) {|stdout| puts stdout }
# => "4\n"
# => "2\n"

# execute and process every line of stdout or stderr
Shell.execute('echo hello; echo >&2 error') do |stdout, stderr|
  if stdout
    print 'OUT> %s' % stdout
    print 'ERR> %s' % stderr
# => "OUT> hello\n"
# => "ERR> error\n"

# execute and throw an exception if the process exited without success
  Shell.execute!('ls /not_existing')
rescue RuntimeError => e
  print e.message # <= prints stderr