41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package checkfn
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
var detectedWSL bool
|
|
var detectedWSLContents string
|
|
|
|
// IsWSL system env
|
|
// https://github.com/Microsoft/WSL/issues/423#issuecomment-221627364
|
|
func IsWSL() bool {
|
|
// ENV:
|
|
// WSL_DISTRO_NAME=Debian
|
|
if len(os.Getenv("WSL_DISTRO_NAME")) > 0 {
|
|
return true
|
|
}
|
|
|
|
if !detectedWSL {
|
|
b := make([]byte, 1024)
|
|
// `cat /proc/version`
|
|
// on mac:
|
|
// !not the file!
|
|
// on linux(debian,ubuntu,alpine):
|
|
// Linux version 4.19.121-linuxkit (root@18b3f92ade35) (gcc version 9.2.0 (Alpine 9.2.0)) #1 SMP Thu Jan 21 15:36:34 UTC 2021
|
|
// on win git bash, conEmu:
|
|
// MINGW64_NT-10.0-19042 version 3.1.7-340.x86_64 (@WIN-N0G619FD3UK) (gcc version 9.3.0 (GCC) ) 2020-10-23 13:08 UTC
|
|
// on WSL:
|
|
// Linux version 4.4.0-19041-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #488-Microsoft Mon Sep 01 13:43:00 PST 2020
|
|
f, err := os.Open("/proc/version")
|
|
if err == nil {
|
|
_, _ = f.Read(b) // ignore error
|
|
f.Close()
|
|
detectedWSLContents = string(b)
|
|
}
|
|
detectedWSL = true
|
|
}
|
|
return strings.Contains(detectedWSLContents, "Microsoft")
|
|
}
|