как проверить, запускается ли программа в bash в ubuntu в windows, а не просто в ubuntu?

<p>довольно просто, обычные места для определения ос, в которой вы находитесь, кажутся идентичными обычному ubuntu в ubuntu для windows. например, <code>uname -a</code> идентичен стандартной установке gnu/linux, а <code>/etc/os-version</code> идентичен установке ubuntu trusty tahr.</p><p>единственное, о чем я могу подумать, это проверить, существует ли <code>/mnt/c/windows</code>, но я не уверен, что это надежная идея.</p>

<p>следующее работает в bash на windows 10, macos и linux:</p><pre><code>#!/bin/bash set -e if grep -qe "(microsoft|wsl)" /proc/version &> /dev/null ; then echo "windows 10 bash" else echo "anything else" fi </code></pre><p>вы должны проверить и «microsoft», и «wsl» для <a href="https://github.com/microsoft/bashonwindows/issues/423#issuecomment-221627364">этот комментарий</a> от ben hillis, wsl developer:</p><blockquote> <p>в настоящее время это, вероятно, лучший способ сделать это. я не могу обещаю, что мы никогда не изменим содержимое этих файлов procfs, но я думаю, что вряд ли мы изменим это на что-то, что не содержат «microsoft» или «wsl».</p> <pre><code>/proc/sys/kernel/osrelease /proc/version </code></pre> </blockquote>

<p>я также искал способы обнаружить это. пока я нашел 2.</p><ul> <li><p><code>/proc/sys/kernel/osrelease</code> - это "3.4.0-microsoft"</p></li> <li><p><code>/proc/version</code> - это «linux версии 3.4.0-microsoft (microsoft@microsoft.com) (gcc версии 4.7 (gcc)) # 1 smp preempt wed 31 декабря 14:42:53 pst 2014»</p></li> </ul><p>если вы просто используете дистрибутив ubuntu, установленный по умолчанию, проблем с их использованием не должно быть, поскольку <a href="https://github.com/microsoft/bashonwindows/issues/423">они сказали, что вряд ли они установят что-либо, что не содержит "microsoft" или "wsl"</a> ,.</p><p>однако, если бы вы установили другой дистрибутив linux, я уверен, что содержимое <code>/proc/sys/kernel/osrelease</code> и <code>/proc/version</code> изменится, так как дистрибутив не был бы скомпилирован microsoft.</p>

<p>я только что придумал это для моего .bashrc для добавления некоторых элементов wsl в $ path.работает в 1703 году. не уверен, если более ранние версии.if [[ $(uname -r) =~ microsoft$ ]]; then foo fi </code></pre>