Detect if a command is piped or not

go, pipe

Solution

Use `os.Stdin.Stat()`.

package main

import (
  "fmt"
  "os"
)

func main() {
    fi, _ := os.Stdin.Stat()

    if (fi.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is from pipe")
    } else {
        fmt.Println("data is from terminal")
    }
}

(Adapted from this tutorial)

Problem

Is there a way to detect if a command in go is piped or not? Example: ``` cat test.txt | mygocommand #Piped, this is how it should be used mygocommand # Not piped, this should be blocked ``` I'm reading from the Stdin `reader := bufio.NewReader(os.Stdin)`.

Original source

Related problems