在 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常數用於檢查標準輸入的模式是否為字元裝置。如果不是,則可以推斷數據來自管道。相反,如果模式是字元設備,則資料來自終端。
工作原理:
透過管道傳送指令時,標準輸入流連接到另一個指令的輸出流。這會將標準輸入流的模式變更為管道模式而不是字元設備模式。透過檢查標準輸入流的模式,我們可以確定命令是否是管道傳輸的。
應用:
檢測管道傳輸指令在各種場景中都很有用,例如as:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3