从bash脚本检测"Windows上的Ubuntu"与本机Ubuntu

Tim*_*Tim 34 bash windows-subsystem-for-linux

bash脚本可以检测它是否在"Windows上的Ubuntu"和本机Ubuntu中运行?如果是这样,怎么样?

env在两台机器上运行,没有看到任何明显的环境变量差异.我可以测试/mnt/c目录的存在,但这不是万无一失的,因为该目录可能也存在于本机Ubuntu上.

Tim*_*Tim 45

看起来/proc/version在Windows上的Ubuntu中包含:

Linux version 3.4.0-Microsoft (Microsoft@Microsoft.com) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Wed Dec 31 14:42:53 PST 2014

我的Ubuntu版本有:

Linux version 4.4.0-31-generic (buildd@lgw01-16) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1) ) #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016

这段代码对我有用,可以检测脚本运行的Ubuntu版本:

if grep -q Microsoft /proc/version; then
  echo "Ubuntu on Windows"
else
  echo "native Linux"
fi
Run Code Online (Sandbox Code Playgroud)

  • 尝试 `grep -qi microsoft /proc/version` 来检测虚假大小写的“[M|m]icrosoft” (5认同)
  • [来自官方消息](https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364):搜索`/ proc/version`或`/ proc/sys/kernel/osrelease`作为字符串` "Microsoft"或"WSL"是最好的方法. (4认同)
  • `if [[“”($(</ proc / sys / kernel / osrelease)“ == * Microsoft]]; 然后... else ... fi`更快,因为它避免了产生`grep`进程 (2认同)