Skip to content

Instantly share code, notes, and snippets.

@morria
Created May 2, 2014 20:46
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save morria/415d2adf17c5c17a8873 to your computer and use it in GitHub Desktop.
Save morria/415d2adf17c5c17a8873 to your computer and use it in GitHub Desktop.
package main
// sudo yum install golang golang-github-kr-pty-devel
import (
"fmt"
// "log"
// "syscall"
"os/exec"
"os"
"io"
"github.com/kr/pty"
)
func main() {
cmd := exec.Command("/bin/zsh")
_, tty, err := pty.Open()
if err != nil {
panic(err);
}
defer tty.Close()
cmd.Stdin = os.Stdin // io.MultiReader(os.Stdin, tty)
cmd.Stdout = io.MultiWriter(os.Stdout, tty)
cmd.Stderr = io.MultiWriter(os.Stderr, tty)
// cmd.SysProcAttr = &syscall.SysProcAttr{Setctty: true, Setsid: true}
// tty := cmd.SysProcAttr
// out, err := os.OpenFile("file", os.O_RDWR, 0)
cmd.Run()
fmt.Println("done");
// syscall.SysProcAttr{Setctty: true, Setsid: true}
/*
pty, tty, err := pty.Open()
if err != nil {
panic(err);
}
defer tty.Close()
cmd.Stdout = tty
cmd.Stdin = tty
cmd.Stderr = tty
cmd.SysProcAttr = &syscall.SysProcAttr{Setctty: true, Setsid: true}
err = syscall.Dup2(int(tty.Fd()), int(os.Stdin.Fd()))
if err != nil { panic(err) }
err = syscall.Dup2(int(tty.Fd()), int(os.Stdout.Fd()))
if err != nil { panic(err) }
err = cmd.Run()
if err != nil {
pty.Close()
panic(err)
}
// return pty, err
*/
/*
_, err := pty.Start(cmd)
if err != nil {
panic(err)
}
*/
/*
err := syscall.Dup2(cmd.Stdin, os.Stdin.Fd())
if err != nil { panic(err) }
*/
/*
err = syscall.Dup2(os.Fd(cmd.Stdout), os.Fd(os.Stdout))
if err != nil { panic(err) }
err = syscall.Dup2(os.Fd(cmd.Stderr), os.Fd(os.Stderr))
if err != nil { panic(err) }
*/
/*
out, err := os.Create("state")
if err != nil {
panic(err)
}
io.Copy(out, pty)
*/
// cmd.Run()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment