DrK*_*bob 27 linux windows bash ubuntu windows-subsystem-for-linux
非常简单,通常的地方找出你所使用的操作系统似乎与Ubuntu for Windows上的普通Ubuntu相同.例如uname -a,与本机GNU/Linux安装/etc/os-version相同,与Ubuntu Trusty Tahr安装相同.
我唯一能想到的就是检查是否/mnt/c/Windows存在,但我不确定这是否是一个万无一失的想法.
Gar*_*ver 32
以下适用于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
Run Code Online (Sandbox Code Playgroud)
你需要根据这个评论来检查"微软"和"WSL",由Ben Hillis,WSL开发人员:
目前,这可能是最好的方法.我不能保证我们永远不会改变这些ProcF文件的内容,但我认为我们不太可能将其改为不包含"Microsoft"或"WSL"的内容.
Run Code Online (Sandbox Code Playgroud)/proc/sys/kernel/osrelease /proc/version
@per-lundberg 更新答案:
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
echo "This is WSL"
else
echo "This is not WSL"
fi
Run Code Online (Sandbox Code Playgroud)
注意:IS_WSL存在于旧版本中(使用lxrun),而WSL_DISTRO_NAME存在于当前版本中(来自 Microsoft Store)。
我一直在寻找检测它的方法.到目前为止,我发现了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 想出了这个,用于向 $PATH 添加一些 WSL 项目。
适用于 1703。不确定是否为早期版本。
if [[ $(uname -r) =~ Microsoft$ ]]; then
foo
fi
Run Code Online (Sandbox Code Playgroud)