it-swarm.com.ru

Как проверить, запускается ли программа в Bash в Ubuntu в Windows, а не просто в Ubuntu?

Довольно просто, обычные места для определения ОС, в которой вы находитесь, кажутся идентичными обычному Ubuntu в Ubuntu для Windows. Например, uname -a идентичен стандартной установке GNU/Linux, а /etc/os-version идентичен установке Ubuntu Trusty Tahr.

Единственное, о чем я могу подумать, это проверить, существует ли /mnt/c/Windows, но я не уверен, что это надежная идея.

20
DrKabob

Следующее работает в bash на Windows 10, macOS и Linux:

#!/bin/bash
set -e
if grep -qE "(Microsoft|WSL)" /proc/version &> /dev/null ; then
    echo "Windows 10 Bash"
else
    echo "Anything else"
fi

Вы должны проверить и «Microsoft», и «WSL» для этот комментарий от Ben Hillis, WSL Developer:

В настоящее время это, вероятно, лучший способ сделать это. Я не могу Обещаю, что мы никогда не изменим содержимое этих файлов ProcFs, но Я думаю, что вряд ли мы изменим это на что-то, что не содержат «Microsoft» или «WSL».

/proc/sys/kernel/osrelease
/proc/version
23
Gary S. Weaver

Я также искал способы обнаружить это. Пока я нашел 2.

  • /proc/sys/kernel/osrelease - это "3.4.0-Microsoft"

  • /proc/version - это «Linux версии 3.4.0-Microsoft ([email protected]) (gcc версии 4.7 (GCC)) # 1 SMP PREEMPTWed 31 декабря 14:42:53 PST 2014»

Если вы просто используете дистрибутив Ubuntu, установленный по умолчанию, проблем с их использованием не должно быть, поскольку они сказали, что вряд ли они установят что-либо, что не содержит "Microsoft" или "WSL" ,.

Однако, если бы вы установили другой дистрибутив Linux, я уверен, что содержимое /proc/sys/kernel/osrelease и /proc/version изменится, так как дистрибутив не был бы скомпилирован Microsoft.

6
Adno

Я только что придумал это для моего .bashrc для добавления некоторых элементов WSL в $ PATH.

Работает в 1703 году. Не уверен, если более ранние версии.

if [[ $(uname -r) =~ Microsoft$ ]]; then
    foo
fi
1
Ryan