This is an education project that attempts to reimplement the GNU coreutils in Go. You can find the full manual here:
https://www.gnu.org/software/coreutils/manual/coreutils.html
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
861 B
45 lines
861 B
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"github.com/mattn/go-isatty"
|
|
"flag"
|
|
"log"
|
|
"io"
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
prog := flag.Args()[0]
|
|
|
|
// ignore SIGHUP
|
|
|
|
if isatty.IsTerminal(os.Stdout.Fd()) {
|
|
fmt.Println("Is Terminal")
|
|
} else if isatty.IsCygwinTerminal(os.Stdout.Fd()) {
|
|
fmt.Println("Is cygwin/msys2 terminal")
|
|
} else {
|
|
cmd := exec.Command(prog)
|
|
if cmd.Err != nil { log.Fatal(cmd.Err) }
|
|
|
|
in, err := cmd.StdinPipe()
|
|
if err != nil { log.Fatal(err) }
|
|
in.Close()
|
|
|
|
stdout, err := cmd.StdoutPipe()
|
|
if err != nil { log.Fatal(err) }
|
|
|
|
stderr, err := cmd.StderrPipe()
|
|
if err != nil { log.Fatal(err) }
|
|
|
|
output := io.MultiReader(stdout, stderr)
|
|
|
|
err = cmd.Start()
|
|
if err != nil { log.Fatal(err) }
|
|
|
|
_, err = io.Copy(os.Stdout, output)
|
|
if err != nil { log.Fatal(err) }
|
|
}
|
|
}
|
|
|