goのコマンドがパイプされているかどうかを検出する方法はありますか?コマンドがパイプされているかどうかを検出する
例:私は標準入力reader := bufio.NewReader(os.Stdin)
から
cat test.txt | mygocommand #Piped, this is how it should be used
mygocommand # Not piped, this should be blocked
読んでいます。
goのコマンドがパイプされているかどうかを検出する方法はありますか?コマンドがパイプされているかどうかを検出する
例:私は標準入力reader := bufio.NewReader(os.Stdin)
から
cat test.txt | mygocommand #Piped, this is how it should be used
mygocommand # Not piped, this should be blocked
読んでいます。
os.Stdin.Stat()
を使用してこれを行うことができます。 (https://www.socketloop.com/tutorials/golang-check-if-os-stdin-input-data-is-piped-or-from-terminalから適応)
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")
}
}
メソッドボディから 'fi、_:= os.Stdin.Stat()'を定義することはできませんが、mainメソッドで使用すると動作します。ありがとう! – Florian
おっと、それは単にタイプミスでした。今修正されました。 –
なぜあなたはそれをブロックしますか?誰かが手作業で端末に入力を入力したり、コピーしたり、何かをコピーしたりするのは実際には問題なのでしょうか? – user2357112
あなたはこれをすでに見てきたかもしれませんが、ここにはシェルスクリプトに関する疑問の行があります:http://stackoverflow.com/questions/911168/how-to-detect-if-my-shell-script-is-running-通し番号 –
@ user2357112 EOFがないので、ユーザーの入力は決して終わらないでしょうか? – Florian