diff --git a/bash/.bash_functions b/bash/.bash_functions index 24a47af..86c73e8 100644 --- a/bash/.bash_functions +++ b/bash/.bash_functions @@ -6,19 +6,42 @@ # --- WSL Host Update --- update_hproxy() { echo "🔄 Обновление IP-адреса для hproxy.local..." - - # Получаем текущий IP хоста - local host_ip=$(ip route show default | awk '{print $3}') - + + local host_ip="" + local wslconfig=$(ls /mnt/c/Users/*/.wslconfig 2>/dev/null | head -n 1) + local win_hosts="/mnt/c/Windows/System32/drivers/etc/hosts" + + # Проверяем наличие параметра networkingMode=mirror в конфиге Windows + if [ -f "$wslconfig" ] && grep -qiE '^[[:space:]]*networkingMode[[:space:]]*=[[:space:]]*mirror' "$wslconfig"; then + echo "🔍 Обнаружен режим Mirror." + + # Читаем hosts из Windows + if [ -f "$win_hosts" ] && grep -qiw "hproxy.local" "$win_hosts"; then + # Извлекаем IP (первый столбец) и чистим от виндовых символов возврата каретки (\r) + host_ip=$(grep -iw "hproxy.local" "$win_hosts" | awk '{print $1}' | tr -d '\r' | head -n 1) + echo "📂 Взят IP из Windows hosts: $host_ip" + else + # Фолбэк на случай, если записи в Windows нет + host_ip="127.0.0.1" + echo "⚠️ Запись hproxy.local в Windows hosts не найдена, используем дефолтный $host_ip" + fi + else + echo "🔍 Обнаружен режим NAT." + + # Формируем IP на лету из маршрута по умолчанию + host_ip=$(ip route show default | awk '{print $3}') + echo "🌐 Вычислен IP шлюза WSL: $host_ip" + fi + if [ -z "$host_ip" ]; then - echo "❌ Ошибка: Не удалось определить IP-адрес хоста." + echo "❌ Ошибка: Не удалось определить IP-адрес." return 1 fi - # Удаляем старую запись и добавляем новую (потребуется пароль sudo) + # Обновляем /etc/hosts в Ubuntu sudo sed -i '/hproxy.local/d' /etc/hosts echo "$host_ip hproxy.local" | sudo tee -a /etc/hosts > /dev/null - + echo "✅ Готово! hproxy.local теперь указывает на $host_ip" }