Module: Mixlib::ShellOut::Windows::Utils

### Home Classes Methods

### In Files

- lib/mixlib/shellout/windows.rb

### Methods

- ::find_executable
- ::pathext
- ::should_run_under_cmd?
- ::which

### Files

- LICENSE

### Class/Module Index

Quicksearch

- Mixlib
- Mixlib::ShellOut
- Mixlib::ShellOut::CommandTimeout
- Mixlib::ShellOut::InvalidCommandOption
- Mixlib::ShellOut::ShellCommandFailed
- Mixlib::ShellOut::Unix
- Mixlib::ShellOut::Windows
- Mixlib::ShellOut::Windows::ThingThatLooksSortOfLikeAProcessStatus
- Mixlib::ShellOut::Windows::Utils
- Process
- Process::Constants
- Process::Functions
- Process::Functions::FFI
- Process::Functions::FFI::Library

No matching classes.

# Mixlib::ShellOut::Windows::Utils

### Public Class Methods

find_executable(path) click to toggle source

Windows has a different notion of what "executable" means The OS will search through valid the extensions and look for a binary there.

    # File lib/mixlib/shellout/windows.rb, line 308
    def self.find_executable(path)
      return path if File.executable? path

      pathext.each do |ext|
        exe = "#{path}#{ext}"
        return exe if File.executable? exe
      end
      return nil
    end

pathext() click to toggle source

    # File lib/mixlib/shellout/windows.rb, line 291
    def self.pathext
      @pathext ||= ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') + [''] : ['']
    end

should_run_under_cmd?(command) click to toggle source

api: semi-private If there are special characters parsable by cmd.exe (such as file redirection), then this method should return true.

This parser is based on github.com/ruby/ruby/blob/9073db5cb1d3173aff62be5b48d00f0fb2890991/win32/win32.c#L1437

    # File lib/mixlib/shellout/windows.rb, line 257
    def self.should_run_under_cmd?(command)
      return true if command =~ /^@/

      quote = nil
      env = false
      env_first_char = false

      command.dup.each_char do |c|
        case c
        when "'", '"'
          if (!quote)
            quote = c
          elsif quote == c
            quote = nil
          end
          next
        when '>', '<', '|', '&', "\n"
          return true unless quote
        when '%'
          return true if env
          env = env_first_char = true
          next
        else
          next unless env
          if env_first_char
            env_first_char = false
            env = false and next if c !~ /[A-Za-z_]/
          end
          env = false if c !~ /[A-Za-z1-9_]/
        end
      end
      return false
    end

which(cmd) click to toggle source

which() mimicks the Unix which command FIXME: it is not working

    # File lib/mixlib/shellout/windows.rb, line 297
    def self.which(cmd)
      ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
        exe = find_executable("#{path}/#{cmd}")
        return exe if exe
      end
      return nil
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.