Go でパイプされたコマンドを検出する
Go でコマンドを実行するとき、コマンドがパイプされているかどうかを判断する必要がある場合があります。 。パイプされたコマンドは、別のコマンドまたはソースからのデータを標準入出力ストリーム経由で直接処理する場合に便利です。
os.Stdin.Stat() によるパイプされたコマンドの検出
コマンドがパイプされているかどうかを検出するには、os.Stdin.Stat() メソッドを使用して標準入力ストリームのモードを調べることができます。 Stat() メソッドは、ファイルのモードなどのさまざまな情報を含む os.FileInfo 構造体を返します。
例:
<code class="go">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") } }</code>
この例では、 os.ModeCharDevice 定数は、標準入力のモードがキャラクタ デバイスであるかどうかを確認するために使用されます。そうでない場合、データはパイプから来ていると推測できます。逆に、モードがキャラクタ デバイスの場合、データは端末から送信されます。
仕組み:
コマンドがパイプされると、標準入力がstream は別のコマンドの出力ストリームに接続されます。これにより、標準入力ストリームのモードがキャラクタ デバイス モードではなくパイプ モードに変更されます。標準入力ストリームのモードを調べることで、コマンドがパイプされているかどうかを判断できます。
アプリケーション:
パイプされたコマンドの検出は、次のようなさまざまなシナリオで役立ちます。として:
以上がGo でコマンドがパイプされているかどうかを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。