diff options
-rw-r--r-- | lib/mixlib/shellout/windows.rb | 13 | ||||
-rw-r--r-- | spec/mixlib/shellout/windows_spec.rb | 4 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/mixlib/shellout/windows.rb b/lib/mixlib/shellout/windows.rb index 27adbbd..a42a30e 100644 --- a/lib/mixlib/shellout/windows.rb +++ b/lib/mixlib/shellout/windows.rb @@ -66,7 +66,7 @@ module Mixlib # # Set cwd, environment, appname, etc. # - app_name, command_line = command_to_run(command) + app_name, command_line = command_to_run(combine_args(*command)) create_process_args = { app_name: app_name, command_line: command_line, @@ -196,6 +196,17 @@ module Mixlib true end + def combine_args(*args) + return args if args.length == 1 + args.map do |arg| + if arg.match(/[ \t\n\v"]/) + "\"#{arg}\"" + else + arg + end + end.join(" ") + end + def command_to_run(command) return run_under_cmd(command) if should_run_under_cmd?(command) diff --git a/spec/mixlib/shellout/windows_spec.rb b/spec/mixlib/shellout/windows_spec.rb index d4edabc..034f4e6 100644 --- a/spec/mixlib/shellout/windows_spec.rb +++ b/spec/mixlib/shellout/windows_spec.rb @@ -15,6 +15,10 @@ describe "Mixlib::ShellOut::Windows", :windows_only do end end + context "with arrays" do + with_command(%w{echo %PATH%}) { is_expected.to be_truthy } + end + context "when unquoted" do with_command(%q{ruby -e 'prints "foobar"'}) { is_expected.not_to be_truthy } |