Ejecutar comando de Shell en Go

Jay Singh 30 enero 2023
  1. Ejecute el comando Shell usando el paquete os/exec en Go
  2. Ejecute el comando Shell usando el paquete os/exec con argumento de paso en Go
Ejecutar comando de Shell 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!"