shellout

in lib/omnibus/util.rb [81:121]


    def shellout(*args)
      options = args.last.is_a?(Hash) ? args.pop : {}
      options = SHELLOUT_OPTIONS.merge(options)

      command_string = args.join(" ")
      in_msys = options.delete(:in_msys_bash) && ENV["MSYSTEM"]
      
      
      
      
      command_string = "bash -c \'#{command_string}\'" if in_msys

      
      log_level = options.delete(:log_level)

      
      options[:live_stream] ||= log.live_stream(:internal)

      
      
      if options[:env]
        options[:environment] = options.fetch(:environment, {}).merge(options[:env])
      end

      
      unless options[:environment].empty?
        log.public_send(log_level, log_key) { "Environment:" }
        options[:environment].sort.each do |key, value|
          log.public_send(log_level, log_key) { "  #{key}=#{value.inspect}" }
        end
      end

      
      log.public_send(log_level, log_key) { "$ #{command_string}" }

      cmd = Mixlib::ShellOut.new(command_string, options)
      cmd.environment["HOME"] = "/tmp" unless ENV["HOME"]
      cmd.run_command
      cmd
    end