【问题标题】:Bash detect WSLBash 检测 WSL
【发布时间】:2019-03-19 18:35:25
【问题描述】:

在我的~/.bashrc 中,我使用OSTYPE 检测正在运行的平台(例如可以是cygwin)。

我应该如何在 Bash 中检测 WSL?以前我使用过COMSPEC env var,但它在 WSL 中丢失了...

我更喜欢轻量级检查而不产生在 WSL/Cygwin 中不便宜的外部进程。

【问题讨论】:

标签: bash windows-subsystem-for-linux


【解决方案1】:

您可以查看/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

【讨论】:

    【解决方案2】:

    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
    • 不适用于我的 WSL1,因为我的是 4.4.0-17763-Microsoft
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 2018-03-19
    • 2019-09-14
    • 2023-03-28
    • 2018-03-18
    • 2019-03-25
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多