From 4171b7613c9f935aa90e9a1fe70424e1a4bfd50e Mon Sep 17 00:00:00 2001 From: Ryooooooga Date: Tue, 12 Oct 2021 22:18:17 +0900 Subject: Use replacer --- pkg/commands/oscommands/os.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'pkg') 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 -- cgit v1.2.3