Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

executar arquivo .sh no GO

Boa noite a todos, executo alguns scripts em Shell e gostaria de transpassa-los para o GO, porém não encontrei nada além de executálos através do "os.OpenFile". Teria alguma outra maneira?

exemplo : Um arquivo .sh que executa um script de backup com rsync por exemplo de um lugar para o outro.

5 respostas

hello_go.go

package main
import (
        "bytes"
        "fmt"
        "log"
        "os/exec"
        "strings"
)
func main() {
        fmt.Printf("Hello, I am from 'hello_go.go' file.");
        fmt.Printf("\nNow, I am going to execute 'hello_sh.sh' file\n");
        cmd := exec.Command("bash", "hello_sh.sh");
        cmd.Stdin = strings.NewReader("");
        var out bytes.Buffer;
        cmd.Stdout = &out;
        err := cmd.Run();
        if err != nil {
                log.Fatal(err);
        }
        fmt.Printf("Output \n",out.String());
}

hello_sh.sh

echo "Hello, I am inside 'hello_sh.sh' file."
echo "Now, I am going to call 'hello_go.go' file. The output: "
go run hello_go.go

desculpa a demora na resposta, porém percebi que foi passado o arquivo em shell dentro do GO, mas e se eu quiser transformar esse arquivo .sh e um arquivo .go é possivel,? exemplo ao invés de fazer com que o hello.go chamar um arquivo shell, eu dentro do proprio go , fazer uma função que execute as funções que o arquivo em shell , executaria.

Ah, perfeito, dá para fazer também, para isso você pode usar o "exec":

cmd := exec.Command("ls", "-lah")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Run()
    if err != nil {
        log.Fatalf("cmd.Run() failed with %s\n", err)
    }

então o comando "exec" , executa o que preciso dentro do shell, por exemplo rsync , mkdir ......

certo?

solução!

Exatamente amigo