一尘不染

检测命令是否通过管道传输

go

有没有一种方法可以检测go中的命令是否通过管道传输?

例:

cat test.txt | mygocommand #Piped, this is how it should be used
mygocommand # Not piped, this should be blocked

我正在从Stdin阅读reader := bufio.NewReader(os.Stdin)


阅读 198

收藏
2020-07-02

共1个答案

一尘不染

您可以使用进行此操作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")
    }
}

(改编自https://www.socketloop.com/tutorials/golang-check-if-os-stdin-input-data-
is-piped-or-from-terminal)

2020-07-02