class MiniPortile

def execute(action, command, command_opts={})

Process.spawn for more information.
command could be an array of args, or one string containing a command passed to the shell. See
def execute(action, command, command_opts={})
  opt_message = command_opts.fetch(:initial_message, true)
  opt_debug =   command_opts.fetch(:debug, false)
  opt_cd =      command_opts.fetch(:cd) { work_path }
  opt_env =     command_opts.fetch(:env) { Hash.new }
  opt_altlog =  command_opts.fetch(:altlog, nil)
  log_out = log_file(action)
  Dir.chdir(opt_cd) do
    output "DEBUG: env is #{opt_env.inspect}" if opt_debug
    output "DEBUG: command is #{command.inspect}" if opt_debug
    message "Running '#{action}' for #{@name} #{@version}... " if opt_message
    if Process.respond_to?(:spawn) && ! RbConfig.respond_to?(:java)
      options = {[:out, :err]=>[log_out, "a"]}
      output "DEBUG: options are #{options.inspect}" if opt_debug
      args = [opt_env, command, options].flatten
      pid = spawn(*args)
      Process.wait(pid)
    else
      env_args = opt_env.map { |k,v| "#{k}=#{v}".shellescape }.join(" ")
      c = if command.kind_of?(Array)
            command.map(&:shellescape).join(" ")
          else
            command
          end
      redirected = %Q{env #{env_args} #{c} > #{log_out.shellescape} 2>&1}
      output "DEBUG: final command is #{redirected.inspect}" if opt_debug
      system redirected
    end
    if $?.success?
      output "OK"
      return true
    else
      output "ERROR. Please review logs to see what happened:\n"
      [log_out, opt_altlog].compact.each do |log|
        next unless File.exist?(log)
        output("----- contents of '#{log}' -----")
        output(File.read(log))
        output("----- end of file -----")
      end
      raise "Failed to complete #{action} task"
    end
  end
end