bash - 从 bash 脚本检测 "Ubuntu on Windows"与 native Ubuntu

标签 bash windows-subsystem-for-linux

<分区>

bash 脚本能否检测它是在“Windows 上的 Ubuntu”中运行还是在 native Ubuntu 中运行?如果是,怎么办?

我在两台机器上都运行了 env,没有发现任何明显的环境变量差异。我可以测试 /mnt/c 目录是否存在,但这并非万无一失,因为该目录也可能存在于 native Ubuntu 上。

最佳答案

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

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 -qi microsoft /proc/version; then
  echo "Ubuntu on Windows"
else
  echo "native Linux"
fi

关于bash - 从 bash 脚本检测 "Ubuntu on Windows"与 native Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859145/

相关文章:

bash - while 在 expect 中循环

bash 脚本通过 ssh 启动服务

python - 通过子进程对WSL的fish执行命令

linux - 如何测试文件是否可由其所有者执行 ** 不一定是我 **

linux - 将第一行复制到文件中的最后一行

bash - 将变量传递给 sed 命令

c - 修复 WSL 上的 pthread_create 引用错误

linux - 在 WSL 上链接 Arm 时出现错误 "__aeabi_unwind_cpp_pr0"

容器化 Linux 环境中的 C++ : why does attempting to allocate large vector causes SIGABRT or neverending loop instead of bad_alloc?

amazon-web-services - 使用 AWS CDK 捆绑 lambda docker 而不是 esbuild/debian WSL2