How to check if a program is run in Bash on Ubuntu on Windows and not just plain Ubuntu?

后端 未结 10 643
时光说笑
时光说笑 2020-12-05 02:07

Pretty straightforward, the usual places to figure out the OS you\'re on seem to be identical to plain Ubuntu on Ubuntu for Windows. For example uname -a is ide

10条回答
  •  被撕碎了的回忆
    2020-12-05 02:53

    The following works in bash on Windows 10, macOS, and Linux:

    #!/bin/bash
    set -e
    if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null ; then
        echo "Windows 10 Bash"
    else
        echo "Anything else"
    fi
    

    You need to check for both "Microsoft" and "WSL" per this comment by Ben Hillis, WSL Developer:

    For the time being this is probably the best way to do it. I can't promise that we'll never change the content of these ProcFs files, but I think it's unlikely we'll change it to something that doesn't contain "Microsoft" or "WSL".

    /proc/sys/kernel/osrelease
    /proc/version
    

    And case shall be ignored for grep. In WSL2, /proc/version gives lowercased microsoft.

提交回复
热议问题