aboutsummaryrefslogtreecommitdiff
path: root/lib/os/exec/exec.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/os/exec/exec.go')
-rw-r--r--lib/os/exec/exec.go28
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/os/exec/exec.go b/lib/os/exec/exec.go
index 0fed245c..1f6f52cf 100644
--- a/lib/os/exec/exec.go
+++ b/lib/os/exec/exec.go
@@ -32,17 +32,31 @@ func ParseCommandArgs(in string) (cmd string, args []string) {
for _, r := range in {
if quote > 0 {
if r == quote {
- arg := sb.String()
- if len(arg) > 0 {
- cmdArgs = append(cmdArgs, sb.String())
+ if prev == '\\' {
+ sb.WriteRune(r)
+ prev = r
+ } else {
+ arg := sb.String()
+ if len(arg) > 0 {
+ cmdArgs = append(cmdArgs, sb.String())
+ }
+ sb.Reset()
+ quote = 0
+ }
+ } else if r == '\\' {
+ if prev == '\\' {
+ sb.WriteRune(r)
+ prev = 0
+ } else {
+ prev = r
}
-
- sb.Reset()
- quote = 0
} else {
+ if prev == '\\' {
+ sb.WriteRune('\\')
+ }
sb.WriteRune(r)
+ prev = r
}
- prev = r
continue
}
if r == '\'' || r == '"' || r == '`' {