windowsoptionalfeature try the run please online not microsoft installed how has for featurename enabled enable distributions component and again linux windows bash ubuntu windows-subsystem-for-linux

linux - try - ¿Cómo verificar si un programa se ejecuta en Bash en Ubuntu en Windows y no solo en Ubuntu?



windows subsystem for linux has no installed distributions (4)

Bastantes sencillos, los lugares habituales para descubrir el sistema operativo en el que se encuentran parecen ser idénticos a los de Ubuntu en Windows para Windows. Por ejemplo, uname -a es idéntico a una instalación nativa de GNU / Linux y /etc/os-version es idéntico a una instalación de Ubuntu Trusty Tahr.

Lo único que se me ocurre es verificar si /mnt/c/Windows existe, pero no estoy seguro de que sea una idea infalible.


Esto es lo que pongo en mi .bashrc

if [[ $(uname -v | sed -rE ''s/^#[0-9]{3,}-(/S+).+//1/'') == "Microsoft" ]]; then # WSL-specific code fi

  • uname -v obtiene la versión del kernel en el formato #379-Microsoft Wed Mar 06 19:16:00 PST 2019 y la expresión sed extrae la cadena de Microsoft .

Lo siguiente funciona en bash en Windows 10, macOS y Linux:

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

Debe verificar tanto "Microsoft" como "WSL" según este comentario de Ben Hillis, desarrollador de WSL:

Por el momento esta es probablemente la mejor manera de hacerlo. No puedo prometer que nunca cambiaremos el contenido de estos archivos ProcF, pero creo que es poco probable que lo cambiemos a algo que no contenga "Microsoft" o "WSL".

/proc/sys/kernel/osrelease /proc/version


Se me ocurrió esto para mi .bashrc para agregar algunos elementos WSL a $ PATH.

Funciona en 1703. No estoy seguro si las versiones anteriores.

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


También he estado buscando maneras de detectar eso. Hasta ahora he encontrado 2.

  • /proc/sys/kernel/osrelease es "3.4.0-Microsoft"

  • /proc/version es "Linux versión 3.4.0-Microsoft ([email protected]) (gcc versión 4.7 (GCC)) # 1 SMP PREEMPT Mié 31 de diciembre 14:42:53 PST 2014"

Si solo usa la distribución de Ubuntu instalada de forma predeterminada, no debería haber problemas con su uso, ya que dijeron que sería improbable que configuren algo que no contenga "Microsoft" o "WSL" .

Sin embargo, si tuviera que instalar una distribución de Linux diferente, estoy bastante seguro de que los contenidos de /proc/sys/kernel/osrelease y /proc/version cambiarán, ya que la distribución no habría sido compilada por Microsoft.