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 301 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
# File lib/mixlib/shellout/windows.rb, line 284 def self.pathext @pathext ||= ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') + [''] : [''] end
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 250 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() mimicks the Unix which command FIXME: it is not working
# File lib/mixlib/shellout/windows.rb, line 290 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
Generated with the Darkfish Rdoc Generator 2.