summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/commands/oscommands/os.go31
1 files changed, 18 insertions, 13 deletions
diff --git a/pkg/commands/oscommands/os.go b/pkg/commands/oscommands/os.go
index b6181364f..4ab258512 100644
--- a/pkg/commands/oscommands/os.go
+++ b/pkg/commands/oscommands/os.go
@@ -202,13 +202,14 @@ func (c *OSCommand) ShellCommandFromString(commandStr string) *exec.Cmd {
quotedCommand := ""
// Windows does not seem to like quotes around the command
if c.Platform.OS == "windows" {
- quotedCommand = commandStr
- quotedCommand = strings.Replace(quotedCommand, "^", "^^", -1)
- quotedCommand = strings.Replace(quotedCommand, "&", "^&", -1)
- quotedCommand = strings.Replace(quotedCommand, "|", "^|", -1)
- quotedCommand = strings.Replace(quotedCommand, "<", "^<", -1)
- quotedCommand = strings.Replace(quotedCommand, ">", "^>", -1)
- quotedCommand = strings.Replace(quotedCommand, "%", "^%", -1)
+ quotedCommand = strings.NewReplacer(
+ "^", "^^",
+ "&", "^&",
+ "|", "^|",
+ "<", "^<",
+ ">", "^>",
+ "%", "^%",
+ ).Replace(commandStr)
} else {
quotedCommand = c.Quote(commandStr)
}
@@ -334,13 +335,17 @@ func (c *OSCommand) PrepareShellSubProcess(command string) *exec.Cmd {
// Quote wraps a message in platform-specific quotation marks
func (c *OSCommand) Quote(message string) string {
if c.Platform.OS == "windows" {
- message = strings.Replace(message, `"`, `"'"'"`, -1)
- message = strings.Replace(message, `\"`, `\\"`, -1)
+ message = strings.NewReplacer(
+ `"`, `"'"'"`,
+ `\"`, `\\"`,
+ ).Replace(message)
} else {
- message = strings.Replace(message, `\`, `\\`, -1)
- message = strings.Replace(message, `"`, `\"`, -1)
- message = strings.Replace(message, "`", "\\`", -1)
- message = strings.Replace(message, "$", "\\$", -1)
+ message = strings.NewReplacer(
+ `\`, `\\`,
+ `"`, `\"`,
+ `$`, `\$`,
+ "`", "\\`",
+ ).Replace(message)
}
escapedQuote := c.Platform.EscapedQuote
return escapedQuote + message + escapedQuote