当前位置: 首页>>技术教程>>正文


如何检查程序是否在Windows上的Ubuntu上运行Bash而不仅仅是普通的Ubuntu?

问题描述

非常简单,通常的地方找出你所使用的操作系统似乎与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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6402.html,未经允许,请勿转载。