def step(name, *args, &block)
      step = Hash.new
      raise(ArgumentError, "Step name must be a symbol") unless name.kind_of?(Symbol)
      if Script.disabled_steps.include? name
        Script.logger.info "[disable_step]#{name}"
        return
      end
      step = args.first unless args.first.nil?
      step[:name] = name
      step[:order] ||= OAR::Scripting::Config[:default_step_order]
      step[:continue] ||= true
      step[:proc] = block
      pre_step = Script.steps.select { |a| a[:name] == name }
      unless pre_step.empty?
        if step[:overwrite]
          Script.logger.info "[step_overwrites] replace #{pre_step.first.inspect} by #{step.inspect}"
          Script.steps.delete pre_step.first
          Script.steps << step
        else
          Script.logger.info "[step_already_defined] skip #{step.inspect}"
        end
      else
        Script.steps << step
      end
    end
def step(name, *args, &block)
      step = Hash.new
      raise(ArgumentError, "Step name must be a symbol") unless name.kind_of?(Symbol)
      if Script.disabled_steps.include? name
        Script.logger.info "[disable_step]#{name}"
        return
      end
      step = args.first unless args.first.nil?
      step[:name] = name
      step[:order] ||= OAR::Scripting::Config[:default_step_order]
      step[:continue] ||= true
      step[:proc] = block
      pre_step = Script.steps.select { |a| a[:name] == name }
      unless pre_step.empty?
        if step[:overwrite]
          Script.logger.info "[step_overwrites] replace #{pre_step.first.inspect} by #{step.inspect}"
          Script.steps.delete pre_step.first
          Script.steps << step
        else
          Script.logger.info "[step_already_defined] skip #{step.inspect}"
        end
      else
        Script.steps << step
      end
    end
def:: sh(cmd)