From 4d8bf6e0d57d824895615cbbb53c6ddec3c2e680 Mon Sep 17 00:00:00 2001 From: yo Date: Sun, 19 Jun 2022 17:43:48 +0200 Subject: [PATCH] executeScript function --- cmd/utils.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/cmd/utils.go b/cmd/utils.go index 22fefad..7c875e9 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -13,6 +13,7 @@ import ( "strconv" "strings" "io/ioutil" + "github.com/google/shlex" "github.com/c2h5oh/datasize" ) @@ -216,6 +217,39 @@ func executeCommandInJail(jail *Jail, cmdline string) (string, error) { return string(out), err } + +/******************************************************************************** + * Execute a script, or shell command. Need to double escape special characters + * Ex.: executeScript("echo '\\\\_o\\< \\~ COINCOIN' > /tmp/coincoin.txt") + *******************************************************************************/ +func executeScript(script string) (string, error) { + var cmd []string + var out []byte + var err error + + if gUseSudo { + cmd = append(cmd, "sudo") + } + + cmd = append(cmd, []string{"/bin/sh", "-c"}...) + + s, err := shlex.Split(script) + if err != nil { + return "", err + } + cmd = append(cmd, strings.Join(s, " ")) + + //fmt.Printf("DEBUG: Prepare to execute %v\n", cmd) + + if len(cmd) > 1 { + out, err = exec.Command(cmd[0], cmd[1:]...).CombinedOutput() + } else { + out, err = exec.Command(cmd[0]).CombinedOutput() + } + + return string(out), err +} + /***************************************************************************** * * ZFS datasets/pools operations