有个场景是当日志输出到屏幕时增加颜色,当输出到普通文件或者重定向就去掉颜色,因为颜色是通过 ANSII Code 控制的,看起来像是乱码一样。
在 Unix 中,万物皆文件,那么就可以通过读取文件属性确认。
例如在 go 代码中:
package main
import (
"fmt"
"os"
)
func main() {
stat, _ := os.Stdout.Stat()
if stat.Mode()&os.ModeCharDevice == os.ModeCharDevice {
fmt.Fprintln(os.Stdout, "terminal")
} else {
fmt.Fprintln(os.Stdout, "pipe")
}
}
$ go run main.go
terminal
$ go run main.go | tee
pipe