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 deMicrosoft
.
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.