非常简单,找出你正在使用的操作系统的平常的地方似乎与Ubuntu for Windows上的普通Ubuntu相同。 例如, uname -a
与本地GNU / Linux安装相同,而/etc/os-version
与Ubuntu Trusty Tahr安装相同。
我唯一能想到的是检查/mnt/c/Windows
存在,但我不确定这是否是一个万无一失的想法。
以下在Windows 10,macOS和Linux上的bash中有效:
#!/bin/bash set -e if grep -qE "(Microsoft|WSL)" /proc/version &> /dev/null ; then echo "Windows 10 Bash" else echo "Anything else" fi
您需要根据WSL开发者Ben Hillis的评论检查“Microsoft”和“WSL”
暂时这可能是最好的办法。 我不能保证我们永远不会改变这些ProcF文件的内容,但我认为我们不太可能将它改为不包含“Microsoft”或“WSL”的东西。
/proc/sys/kernel/osrelease /proc/version
我一直在寻找方法来检测。 到目前为止我找到了2个。
/proc/sys/kernel/osrelease
是“3.4.0-Microsoft”
/proc/version
是“Linux版本3.4.0-Microsoft(Microsoft@Microsoft.com)(gcc版本4.7(GCC))#1 SMP PREEMPT Wed Dec 31 14:42:53 PST 2014”
如果您只是使用默认安装的Ubuntu发行版,那么使用它们应该没有问题,因为他们表示不可能将它们设置为不包含“Microsoft”或“WSL”的东西 。
但是,如果您要安装不同的Linux发行版,则可以确定/proc/sys/kernel/osrelease
和/proc/version
将会更改,因为发行版不会由Microsoft编译。
我刚刚为我的.bashrc提供了一些WSL项目添加到$ PATH。
在1703年工作。不知道如果早期版本。
if [[ $(uname -r) =~ Microsoft$ ]]; then foo fi