#!/usr/bin/env bash # detect_wsl # ---------- # Detecta si el sistema actual es WSL (Windows Subsystem for Linux). # Con --check solo retorna exit code (0=WSL, 1=no WSL) sin output. # Sin argumentos, imprime información completa del entorno WSL. # # USO: # source detect_wsl.sh # detect_wsl [--check] detect_wsl() { local check_only=false [[ "${1:-}" == "--check" ]] && check_only=true # Detección interna de WSL _is_wsl() { if [[ -f /proc/version ]] && grep -qi "microsoft\|wsl" /proc/version; then return 0 fi if [[ -f /proc/sys/kernel/osrelease ]] && grep -qi "microsoft\|wsl" /proc/sys/kernel/osrelease; then return 0 fi if [[ -d /mnt/c ]] && [[ -f /proc/sys/fs/binfmt_misc/WSLInterop ]]; then return 0 fi return 1 } _get_wsl_version() { if [[ -f /proc/version ]]; then if grep -qi "WSL2" /proc/version; then echo "WSL2" elif grep -qi "microsoft" /proc/version; then echo "WSL1" else echo "Unknown" fi else echo "Unknown" fi } _get_windows_username() { if [[ -n "${WSLENV:-}" ]]; then cmd.exe /c "echo %USERNAME%" 2>/dev/null | tr -d '\r\n' || echo "Unknown" else echo "Unknown" fi } # Modo --check: solo exit code if [[ "$check_only" == true ]]; then _is_wsl && return 0 || return 1 fi # Modo informativo if ! _is_wsl; then echo "detect_wsl: este sistema NO es WSL" >&2 return 1 fi local wsl_version wsl_version="$(_get_wsl_version)" local win_user win_user="$(_get_windows_username)" local distro="Unknown" if [[ -f /etc/os-release ]]; then distro="$(. /etc/os-release && echo "${PRETTY_NAME:-${ID:-Unknown}}")" fi echo "=== Entorno WSL ===" echo " Versión de WSL: ${wsl_version}" echo " Usuario Windows: ${win_user}" echo " Distribución: ${distro}" echo " Hostname: $(hostname)" echo "" echo "=== Unidades de Windows montadas ===" ls /mnt/ 2>/dev/null | grep -E "^[a-z]$" | while IFS= read -r drive; do echo " ${drive}: → /mnt/${drive}" done echo "" local current_win_path current_win_path="$(wslpath -w "$(pwd)" 2>/dev/null || echo "N/A")" echo "=== Directorio actual en Windows ===" echo " ${current_win_path}" echo "" } # Ejecutar si se invoca directamente if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then detect_wsl "$@" fi