diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2017-10-02 11:36:19 -0400 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2017-10-14 15:26:37 +0900 |
commit | c4185e81e86e339ae2c18e5d9b596b7992ec179b (patch) | |
tree | 13877428693578f3e65adcfff08d7f0329f128d9 /src/util | |
parent | 0580fe9046d038c359645f6e7ed99acfa45b2190 (diff) |
Fix ExecCommandWith for cmd.exe in Windows (#1072)
Close #1018
Run the command as is in cmd.exe with no parsing and escaping.
Explicity set cmd.SysProcAttr so execCommand does not escape the command.
Technically, the command should be escaped with ^ for special characters,
including ". This allows cmd.exe commands to be chained together.
See https://github.com/neovim/neovim/pull/7343#issuecomment-333350201
This commit also updates quoteEntry to use strings.Replace instead of
strconv.Quote which escapes more than \ and ".
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/util_windows.go | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/util/util_windows.go b/src/util/util_windows.go index 493f4d7f..86409fde 100644 --- a/src/util/util_windows.go +++ b/src/util/util_windows.go @@ -6,8 +6,6 @@ import ( "os" "os/exec" "syscall" - - "github.com/mattn/go-shellwords" ) // ExecCommand executes the given command with cmd @@ -18,11 +16,13 @@ func ExecCommand(command string) *exec.Cmd { // ExecCommandWith executes the given command with cmd. _shell parameter is // ignored on Windows. func ExecCommandWith(_shell string, command string) *exec.Cmd { - args, _ := shellwords.Parse(command) - allArgs := make([]string, len(args)+1) - allArgs[0] = "/c" - copy(allArgs[1:], args) - return exec.Command("cmd", allArgs...) + cmd := exec.Command("cmd") + cmd.SysProcAttr = &syscall.SysProcAttr{ + HideWindow: false, + CmdLine: fmt.Sprintf(` /s /c "%s"`, command), + CreationFlags: 0, + } + return cmd } // IsWindows returns true on Windows |