gopkg.in/essentialkaos/ek.v3@v3.5.1/system/exec.go (about) 1 // +build linux, darwin, !windows 2 3 package system 4 5 // ////////////////////////////////////////////////////////////////////////////////// // 6 // // 7 // Copyright (c) 2009-2016 Essential Kaos // 8 // Essential Kaos Open Source License <http://essentialkaos.com/ekol?en> // 9 // // 10 // ////////////////////////////////////////////////////////////////////////////////// // 11 12 import ( 13 "os" 14 "os/exec" 15 "strings" 16 ) 17 18 // ////////////////////////////////////////////////////////////////////////////////// // 19 20 // SudoExec execute some command with sudo 21 func SudoExec(user string, args ...string) error { 22 var cmdArgs []string 23 24 cmdArgs = append(cmdArgs, "-u", user) 25 cmdArgs = append(cmdArgs, args...) 26 27 return Exec("sudo", cmdArgs...) 28 } 29 30 // Exec execute some command 31 func Exec(command string, args ...string) error { 32 var cmd = exec.Command(command) 33 34 cmd.Args = append(cmd.Args, args...) 35 36 return cmd.Run() 37 } 38 39 // RunAsUser run command as some user 40 func RunAsUser(user, logFile string, args ...string) error { 41 var log *os.File 42 var err error 43 44 if logFile != "" { 45 log, err = os.OpenFile(logFile, os.O_APPEND|os.O_WRONLY, 0644) 46 47 if err != nil { 48 return err 49 } 50 } 51 52 defer log.Close() 53 54 cmd := exec.Command("/sbin/runuser", "-s", "/bin/bash", user, "-c", strings.Join(args, " ")) 55 56 if logFile != "" && log != nil { 57 cmd.Stderr = log 58 cmd.Stdout = log 59 } 60 61 return cmd.Run() 62 } 63 64 // ////////////////////////////////////////////////////////////////////////////////// //