Go でパイプされたコマンドを検出する
Go でコマンドを実行するとき、コマンドがパイプされているかどうかを判断する必要がある場合があります。 。パイプされたコマンドは、別のコマンドまたはソースからのデータを標準入出力ストリーム経由で直接処理する場合に便利です。
os.Stdin.Stat()によるパイプされたコマンドの検出
コマンドがパイプされているかどうかを検出するには、os.Stdin.Stat() メソッドを使用して標準入力ストリームのモードを調べることができます。 Stat() メソッドは、ファイルのモードなど、ファイルに関するさまざまな情報を含む os.FileInfo 構造体を返します。
例:
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")
}
}
この例では、os.ModeCharDevice 定数を使用して、標準入力のモードがキャラクタ デバイスであるかどうかを確認します。そうでない場合、データはパイプから来ていると推測できます。逆に、モードがキャラクタ デバイスの場合、データは端末から送信されます。
仕組み:
コマンドがパイプされると、標準入力がstream は別のコマンドの出力ストリームに接続されます。これにより、標準入力ストリームのモードがキャラクタ デバイス モードではなくパイプ モードに変更されます。標準入力ストリームのモードを調べることで、コマンドがパイプされているかどうかを判断できます。
Applications:
パイプされたコマンドの検出は、次のようなさまざまなシナリオで役立ちます。 as:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3