From 7c3f42bbbaf06a9dfabf50585de54d5e675992be Mon Sep 17 00:00:00 2001 From: Rashil Gandhi Date: Wed, 27 Oct 2021 13:20:40 +0530 Subject: [PATCH] Fix powershell escaping --- src/terminal_windows.go | 2 +- src/util/util_windows.go | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/terminal_windows.go b/src/terminal_windows.go index 7ba64dff..5e748733 100644 --- a/src/terminal_windows.go +++ b/src/terminal_windows.go @@ -37,7 +37,7 @@ func quoteEntry(entry string) string { return "^" + match }) } else if strings.Contains(shell, "pwsh") || strings.Contains(shell, "powershell") { - escaped := strings.Replace(entry, `"`, `""`, -1) + escaped := strings.Replace(entry, `"`, `\"`, -1) return "'" + strings.Replace(escaped, "'", "''", -1) + "'" } else { return "'" + strings.Replace(entry, "'", "'\\''", -1) + "'" diff --git a/src/util/util_windows.go b/src/util/util_windows.go index 9ac062af..e4e04376 100644 --- a/src/util/util_windows.go +++ b/src/util/util_windows.go @@ -39,24 +39,24 @@ func ExecCommand(command string, setpgid bool) *exec.Cmd { // NOTE: For "powershell", we should ideally set output encoding to UTF8, // but it is left as is now because no adverse effect has been observed. func ExecCommandWith(shell string, command string, setpgid bool) *exec.Cmd { - var commandline string + var cmd *exec.Cmd if strings.Contains(shell, "cmd") { - commandline = fmt.Sprintf(` /v:on/s/c "%s"`, command) - } else if strings.Contains(shell, "pwsh") || strings.Contains(shell, "powershell") { - commandline = fmt.Sprintf(` -NoProfile -Command "& { %s }"`, command) - } - if len(commandline) == 0 { - cmd := exec.Command(shell, "-c", command) + cmd = exec.Command(shell) cmd.SysProcAttr = &syscall.SysProcAttr{ HideWindow: false, + CmdLine: fmt.Sprintf(` /v:on/s/c "%s"`, command), CreationFlags: 0, } return cmd } - cmd := exec.Command(shell) + + if strings.Contains(shell, "pwsh") || strings.Contains(shell, "powershell") { + cmd = exec.Command(shell, "-NoProfile", "-Command", command) + } else { + cmd = exec.Command(shell, "-c", command) + } cmd.SysProcAttr = &syscall.SysProcAttr{ HideWindow: false, - CmdLine: commandline, CreationFlags: 0, } return cmd