HOWTO · Go
Ejecutar comando de Shell en Go
Este tutorial demuestra cómo ejecutar un comando de shell en Go.
En esta página
Los comandos de shell le dicen al sistema cómo hacer una tarea en particular. Los comandos externos se ejecutan a través del paquete exec.
El paquete os/exec, a diferencia de la llamada a la biblioteca del sistema desde C y otros lenguajes, no ejecuta el shell del sistema y no expande ningún patrón global ni maneja expansiones, canalizaciones o redirecciones similares a shell.
El paquete es más similar a la familia de funciones exec en C.
En este artículo, aprenderá cómo ejecutar shell o comandos externos en Golang.
Ejecute el comando Shell usando el paquete os/exec en Go
Cualquier sistema operativo o comando del sistema se puede activar usando el paquete os/exec de Go. Proporciona dos funciones que se pueden usar para hacer esto: Command, que crea el objeto cmd, y Output, que ejecuta el comando y devuelve la salida estándar.
package main
import (
"fmt"
"log"
"os/exec"
)
func main() {
out, err := exec.Command("pwd").Output()
if err != nil {
log.Fatal(err)
}
fmt.Println(string(out))
}
Producción :
It will return the location of your current working directory.
Ahora, veamos cómo podemos usar el paquete os/exec para ejecutar comandos simples como ls.
Primero, debemos importar los tres paquetes cruciales, es decir, fmt, os/exec y runtime. Después de eso, construiremos un método execute() que comenzará a ejecutar el código.
package main
import (
"fmt"
"os/exec"
"runtime"
)
func execute() {
out, err := exec.Command("ls").Output()
if err != nil {
fmt.Printf("%s", err)
}
fmt.Println("Program executed")
output := string(out[:])
fmt.Println(output)
}
func main() {
if runtime.GOOS == "windows" {
fmt.Println("This program is not aplicable for windows machine.")
} else {
execute()
}
}
Producción :
Program executed
bin
dev
etc
home
lib
lib64
proc
root
sys
tmp
tmpfs
usr
var
Ejecute el comando Shell usando el paquete os/exec con argumento de paso en Go
La función Command devuelve una estructura Cmd que puede ejecutar el programa suministrado con los parámetros especificados. El primer argumento es el programa a ejecutar; los otros argumentos son los parámetros del programa.
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
"strings"
)
func main() {
cmd := exec.Command("tr", "a-z", "A-Z")
cmd.Stdin = strings.NewReader("Hello Boss!")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Printf("New Message: %q\n", out.String())
}
Producción :
New Message: "HELLO BOSS!"