def define_command( name, opts = {}, &block )
      blocking = opts[:blocking] || false
      log_path = opts[:log_path] || false

      commands[name] = { :blocking => blocking }

      define_method( name ) do |*args|
        if block
          run name, block.call(*args), log_path
        else
          run name, nil, log_path
        end
        join if blocking
      end
    end
def define_command( name, opts = {}, &block )
      blocking = opts[:blocking] || false
      log_path = opts[:log_path] || false

      commands[name] = { :blocking => blocking }

      define_method( name ) do |*args|
        if block
          run name, block.call(*args), log_path
        else
          run name, nil, log_path
        end
        join if blocking
      end
    end
Create a user definde command
 @return [nil]
 @param [Symbol] name The user defined command name
 @param [Hash] options Options.
 @option options :blocking (false) Describe if the execution is blocking or non-blocking
 @option options :log_path (false) Path used to store logs # (dont store logs if no path specified)