Ejecutar comando de Shell en Go
- Ejecute el comando Shell usando el paquete os/exec en Go
- Ejecute el comando Shell usando el paquete os/exec con argumento de paso en Go
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!"