Golang exec.command

From UVOO Tech Wiki
Revision as of 02:59, 16 November 2020 by Busk (talk | contribs)
Jump to navigation Jump to search

Windows and Linux

package main

import (
    "fmt"
    "os/exec"
    "os"
    //"strings"
    "runtime"
)


func shell_cmd(name string, args []string) {
    cmd := exec.Command(name, args...)
    out, err := cmd.Output()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(out))
}


func shellcmd() {
    system_os := runtime.GOOS
    if system_os == "linux" {
        name := os.Args[2]
        args := os.Args[3:]
        shell_cmd(name, args)
    }else if system_os == "windows" {
        if len(os.Args) < 3 {
            fmt.Printf("Usage: %v <cmd> <args>\n", os.Args[0])
            fmt.Printf("Example: %v ls -lhat\n", os.Args[0])
            os.Exit(3)
        }
        var name string = "powershell.exe"
        args := os.Args[2:]
        shell_cmd(name, args)
    }else{
        fmt.Printf("OS %v not supported.\n", system_os)
    }

}


func main() {
    if len(os.Args) < 2 {
        fmt.Printf("Usage: %v <fuction>\n", os.Args[0])
        fmt.Printf("Example: %v shellcmd ls -lhat\n", os.Args[0])
        os.Exit(3)
    }
    function := os.Args[1]
    if function == "shellcmd" {
        shellcmd()
    }else{
        fmt.Printf("E: Unsupported function %v\n", function)
    }
}

Windows

package main

import(
    "fmt"
    "os/exec"
    "os"
    "log"
)


func pscmd(s string){
    args := []string{s}
    // cmd := exec.Command("powershell.exe", "ls", "-Depth", "1")
    cmd := exec.Command("powershell.exe", args...)

    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Run()
    if err != nil {
        log.Fatalf("cmd.Run() failed with %s\n", err)
    }
    fmt.Println("======")
}

func main(){   

    pscmd("ls -Depth 1")
    pscmd("echo 'hi there'")

}