判断我们是否在 WSL 中 运行 linux?

Tell if we are running linux inside WSL?

我有几个 linux 系统,包括那些 运行 作为 WSL(Windows Linux 的子系统)在 Windows 机器上。

我希望 script/program/whatever 能够判断它是否在 WSL 中 运行。我可以做一些骇人听闻的事情,比如寻找 /mnt/c/... 的存在,但这可能只是安装在 Linux 系统上的 Windows 磁盘。

是否有一种干净的方法来做到这一点,或者 WSL 是否太像一个虚拟机以至于无法知道我们 运行 不在 Windows 中?

uname -a

对我来说似乎是一个相当合理的解决方案。

~# uname -a
Linux Eve 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux

uname 中 "Microsoft" 的明确表示表明我们在 WSL 中是 运行。现在,为了公平起见,这个 可能 只是一个伪造的 uname 字符串。但对于橡胶与道路相遇的地方,这不仅仅是满足要求。