【发布时间】:2019-03-19 18:35:25
【问题描述】:
在我的~/.bashrc 中,我使用OSTYPE 检测正在运行的平台(例如可以是cygwin)。
我应该如何在 Bash 中检测 WSL?以前我使用过COMSPEC env var,但它在 WSL 中丢失了...
我更喜欢轻量级检查而不产生在 WSL/Cygwin 中不便宜的外部进程。
【问题讨论】:
标签: bash windows-subsystem-for-linux
在我的~/.bashrc 中,我使用OSTYPE 检测正在运行的平台(例如可以是cygwin)。
我应该如何在 Bash 中检测 WSL?以前我使用过COMSPEC env var,但它在 WSL 中丢失了...
我更喜欢轻量级检查而不产生在 WSL/Cygwin 中不便宜的外部进程。
【问题讨论】:
标签: bash windows-subsystem-for-linux
您可以查看/proc/version。在我的机器上(Win 10 1809),它包含:
Linux version 4.4.0-17763-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #55-Microsoft Sat Oct 06 18:05:00 PST 2018
【讨论】:
uname 也是一个选项,即
if [[ $(uname -r) =~ WSL ]]; then
# WSL detected
<run code>
fi
这种方法可行,因为 WSL2 下的内核版本字符串与 WSL1 略有不同。
$ uname -r
5.4.72-microsoft-standard-WSL2
【讨论】:
/proc/version,因为不需要fork()。
4.19.128-microsoft-standard
4.4.0-17763-Microsoft