48 lines
875 B
Go
48 lines
875 B
Go
package shell
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"os/exec"
|
|
"runtime"
|
|
)
|
|
|
|
// OpenBrowser opens the specified URL in the default browser of the user
|
|
func OpenBrowser(url string) error {
|
|
var cmd string
|
|
var args []string
|
|
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
cmd = "cmd"
|
|
args = []string{"/c", "start"}
|
|
case "darwin":
|
|
cmd = "open"
|
|
default: // "linux", "freebsd", "openbsd", "netbsd"
|
|
cmd = "xdg-open"
|
|
}
|
|
args = append(args, url)
|
|
return exec.Command(cmd, args...).Start()
|
|
}
|
|
|
|
// Run will kick off a shell task and pipe the results to the respective std pipes
|
|
func Run(cmd string, args ...string) error {
|
|
c := exec.Command(cmd, args...)
|
|
stderr, err := c.StderrPipe()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
go func() {
|
|
io.Copy(os.Stderr, stderr)
|
|
}()
|
|
|
|
stdout, err := c.StdoutPipe()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
go func() {
|
|
io.Copy(os.Stdout, stdout)
|
|
}()
|
|
return c.Run()
|
|
}
|