Graham King

Solvitas perambulum

In Go, is your terminal a console or a pipe? isatty golang

Is my terminal connected to the console, or to a pipe?

package main

import (
	"fmt"
	"os"
	"golang.org/x/term"
)

func main() {
	if term.IsTerminal(int(os.Stdin.Fd())) {
		fmt.Println("Yes is a terminal")
	} else {
		fmt.Println("No is not a terminal")
	}
}

For example:

$ go build myprog.go
$ ./myprog                # is a terminal
$ echo "boo" | ./myprog   # not a terminal

You might need to:

go get golang.org/x/term

Updated May 2012 to use the exp/terminal package.

Updated Dec 2014, terminal moved to crypto

Updated Aug 2023, terminal moved to x/term. Thanks Ewen!