📝 Edit page
➕ Add page
Shell
Execute a shell command within a Go script
Set up a shell command as a string and run it. You could run a shell command like date or even access programming language CLI tool like python or node.
This is using the exec builtin module. Similar to using the subprocess module in Python.
See exec package in Go’s standard packages.
Syntax
Import
import (
"os/exec"
)
Command
You could pass something simple like "ls" or with arguments like "ls -l".
cmd := exec.Command("COMMAND")
The result will be of type exec.Cmd.
You will get an error on invalid command if you have spaces in your command. So use spaces:
exec.Command("ls")
exec.Command("ls", "-l")
exec.Command("bash", "greet.sh")
Run
If you don’t care about the output.
exec.Command("COMMAND").Run()
Or
cmd := exec.Command("COMMAND").
cmd.Run()
Output
output, err := exec.Command("COMMAND").Output()
Use .Output() to get stdout.
Use .CombinedOutput() to get stdout and stderr.
Examples
Run without checking output
cmd := exec.Command("firefox")
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
Run scripts
// Or "/bin/sh" for portability.
shell := "bash"
path := "./my_script.sh"
exec.Command(shell, path)
Execute binary or executable script
exec.Command("date")
exec.Command("./my_executable.sh")
A fuller example:
main.gopackage main import ( "fmt" "log" "os/exec" ) func main() { cmd := "date" out, err := exec.Command(cmd).Output() if err != nil { log.Fatal(err) } fmt.Printf("The date is: %s\n", out) }
Result:
$ go run main.go
The date is: Thu 25 Feb 2021 17:42:46 SAST
Handle errors and output
output, err := exec.Command("COMMAND".Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Output is %s\n", output)