diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2019-05-30 17:51:33 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2019-05-30 17:56:33 -0700 |
commit | 4c955af9f7f490aff6db5efcfc5beceb882045b1 (patch) | |
tree | 52e5da54c92faeed4b83a39f143af2b4a2d6b0d0 | |
parent | 35f1d3636974838cd623c65f18b861fa2d16b777 (diff) | |
download | mixlib-shellout-lcg/windows-array-args2.tar.gz |
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
-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 } |