问题描述
非常简单,通常的地方找出你所使用的操作系统似乎与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
您需要通过Ben Hillis,WSL开发人员检查每个this comment的”Microsoft”和”WSL”:
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
次佳解决方案
我一直在寻找检测它的方法。到目前为止,我发现了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发行版,那么使用它们应该没有问题,如they said that it would be unlikely for them to set either to something that doesn’t contain “Microsoft” or “WSL”。
但是,如果您要安装其他Linux发行版,我很确定/proc/sys/kernel/osrelease
和/proc/version
的内容会发生变化,因为发行版不会由Microsoft编译。
第三种解决方案
我刚刚为我的.bashrc提出了这个问题,将一些WSL项添加到$ PATH。
在1703年工作。不确定是否早期版本。
if [[ $(uname -r) =~ Microsoft$ ]]; then
foo
fi