Гид по технологиям

Как запускать Windows‑программы из Bash в Windows 10

6 min read Windows/WSL Обновлено 19 Dec 2025
Запуск Windows‑программ в Bash (Windows 10)
Запуск Windows‑программ в Bash (Windows 10)

Скриншот Bash, запускающего Windows‑программу

Краткие ссылки

  • Что нужно знать
  • Как запустить Windows‑программу
  • Как передать аргумент команде
  • Как запустить встроенную команду
  • Как добавить директории в PATH
  • Как перенаправить вывод одной команды в другую

Что нужно знать

Здесь — основные факты, которые важно учитывать при запуске Windows‑команд из Bash:

  • Пользователь: программы, запущенные из Bash, работают от имени текущего Windows‑пользователя.
  • Права: программы наследуют права процесса Bash.exe. Чтобы команды имели права администратора, запускайте Bash «от имени администратора».
  • Рабочая директория: Windows‑программы используют ту же рабочую директорию, что и Bash. Команда cd в Bash меняет текущую директорию и для Windows‑утилит.

Важно: среда Bash чувствительна к регистру, а Windows‑путь в Bash представлен через точку монтирования /mnt (например, C:\ доступен как /mnt/c).

Как запустить Windows‑программу

Чтобы запустить Windows‑программу, введите путь к .exe в Bash. Путь к диску C в Bash — /mnt/c. Учитывайте регистр.

Например, чтобы запустить утилиту Ping, расположенную по пути C:\Windows\System32\PING.EXE, выполните:

/mnt/c/Windows/System32/PING.EXE

Ошибка с регистром приведёт к неудаче:

/mnt/c/windows/system32/ping.exe

Это не сработает, потому что Bash чувствителен к регистру.

Открытое окно Bash с примером запуска PING.EXE

Если путь содержит пробелы или специальные символы (например Program Files), их нужно экранировать с помощью обратного слэша \:

/mnt/c/Program\ Files\ \(x86\)/Internet\ Explorer/iexplore.exe

Экранный пример запуска Internet Explorer через Bash.

Пример экранирования пробелов и скобок в пути

Как передать аргумент команде

Bash передаёт аргументы напрямую в вызываемую программу. Это значит, что если вы хотите передать пути Windows‑формата, используйте Windows‑путь в кавычках.

Пример: пропинговать сайт example.com:

/mnt/c/Windows/System32/PING.EXE example.com

Открыть файл hosts в Блокноте:

/mnt/c/Windows/System32/notepad.exe "C:\Windows\System32\drivers\etc\hosts"

Здесь Notepad ожидает Windows‑путь, поэтому строка с обратными слэшами и двоеточием остаётся в формате Windows.

Блокнот Windows, открывающий hosts файл через Bash

Совет: если передаёте много файлов или пути формируются динамически, соберите их в переменную Bash и передайте через кавычки.

Как запустить встроенную команду

Некоторые команды — не отдельные .exe, а встроены в cmd.exe (например, dir, copy, del). Их нужно запустить через сам cmd.exe с ключом /C.

/mnt/c/Windows/System32/cmd.exe /C command

Пример для dir:

/mnt/c/Windows/System32/cmd.exe /C dir

Используйте /C если хотите выполнить команду и выйти. Для выполнения и продолжения можно использовать /K, но обычно /C удобнее в скриптах.

Запуск встроенной команды dir через cmd.exe из Bash

Как добавить директории в PATH

WSL (Windows Subsystem for Linux) обрабатывает Windows‑исполняемые похожим образом, как Linux‑бинарники. Вы можете добавить папку с .exe в переменную PATH и запускать .exe по имени.

Пример: добавить System32 в PATH на текущую сессию:

export PATH=$PATH:/mnt/c/Windows/System32

После этого можно запускать утилиты напрямую:

PING.exe example.com
notepad.exe
cmd.exe /C dir

Чтобы сделать изменение постоянным, добавьте строку export PATH=... в ваш ~/.bashrc или ~/.profile.

Скрин PATH с системными директориями Windows

Как перенаправить вывод одной команды в другую

Вы можете пайпать вывод Windows‑программ в Linux‑утилиты и наоборот. Например, посмотреть все сетевые параметры и отфильтровать строки с IPv4:

/mnt/c/Windows/System32/ipconfig.exe -all | grep "IPv4 Address"

Такие конструкции работают и в скриптах. Также вы можете перенаправлять вывод в файлы, записанные в файловой системе Windows.

Чтобы запускать Bash‑команды из классического Command Prompt, используйте bash -c "команда".

Ограничения и типичные ошибки

  • Регистр символов: всегда учитывайте чувствительность к регистру в Bash.
  • Права доступа: если Bash не запущен с повышенными правами, некоторые Windows‑команды, требующие администратора, не выполнятся.
  • Специальные символы: неэкранированные пробелы и скобки ломают путь.
  • Конфликты имён: если в PATH есть утилита с тем же именем и в Linux, и в Windows, может понадобиться указать явный путь.

Важно: не все GUI‑программы ведут себя ожидаемо при запуске из серверной сессии без графической оболочки. Для GUI‑программ предпочтительнее запуск из интерактивной сессии пользователя.

Частые сценарии и примеры использования

  • Автоматизация: в скрипте Bash можно собирать данные с Windows‑утилит и обрабатывать их Linux‑инструментами.
  • Диагностика: запуск ipconfig.exe или netstat.exe в пайпе с grep/awk упрощает фильтрацию данных.
  • Редактирование: открыть системные файлы Windows в Notepad напрямую из Bash.

Пример скрипта, который собирает адреса IPv4 и сохраняет в файл:

#!/bin/bash
export PATH=$PATH:/mnt/c/Windows/System32
/mnt/c/Windows/System32/ipconfig.exe -all | grep "IPv4" > ~/ipv4_addresses.txt

Безопасность и лучшие практики

  • Запускайте Bash с повышенными правами только при необходимости.
  • Не добавляйте системные директории в PATH без понимания последствий — можно случайно запускать неподходящие бинарники.
  • Проверяйте и экранируйте входные данные в скриптах, особенно если они передаются в cmd.exe, чтобы избежать инъекций команд.
  • Логи и файлы, созданные утилитами Windows, могут иметь NTFS‑разрешения. Учитывайте это при совместном использовании файлов между Linux и Windows средами.

Когда это не сработает

  • При попытке запустить 16‑битные Windows‑программы (они не поддерживаются на современных 64‑битных системах и в WSL).
  • Если программа ожидает GUI и не получает доступа к нужному сеансу, она может не запуститься корректно.
  • Если Bash запущен в контейнеризированной или удалённой среде без доступа к Windows API, некоторые вызовы могут завершаться с ошибкой.

Альтернативные подходы

  • Использовать natively Linux‑версии утилит (если доступны) для полной POSIX‑совместимости.
  • Для глубокого взаимодействия с Windows API применять PowerShell и вызывать его из Bash: /mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command "...".
  • Запускать программы через SSH или WinRM, если требуется удалённое выполнение под другим пользователем.

Быстрые эвристики и ментальные модели

  • Если путь содержит двоеточие (C:), преобразуйте его в /mnt/c и экранируйте пробелы.
  • Вопрос прав: если что‑то не выполняется — попробуйте запустить Bash как администратор и повторить.
  • Конфликт имён — явно указывайте /mnt/c/.../program.exe, чтобы избежать неочевидного поведения.

Роль‑ориентированные чек‑листы

Для разработчика:

  • Добавить System32 в PATH в сессию для тестов.
  • Проверить чувствительность к регистру путей.
  • Закомментировать постоянные изменения PATH в .bashrc до релиза.

Для администратора:

  • Не давать права администратора без нужды.
  • Проверить скрипты на инъекции команд.
  • Документировать необходимые исключения в брандмауэре и доступ к файлам.

Для пользователя:

  • Экранировать пробелы и скобки в путях.
  • [ ] Использовать cmd.exe /C для встроенных команд.

Мини‑методология проверки (smoke test)

  1. Откройте Bash как обычный пользователь.
  2. Выполните /mnt/c/Windows/System32/PING.EXE example.com — ожидаемый вывод: ответы ping.
  3. Попробуйте notepad.exe "C:\Windows\System32\drivers\etc\hosts" — Блокнот должен открыть файл.
  4. Запустите cmd.exe /C dir — список файлов текущей директории.
  5. Выполните ipconfig.exe -all | grep "IPv4" — вывод должен содержать IPv4‑адреса.

Сопоставимость и советы по миграции

  • В WSL 1 и 2 поведение немного различается: WSL 2 работает в виртуализированной среде, но доступ к /mnt/c сохраняется. Проверьте поведение вашего конкретного дистрибутива.
  • При миграции скриптов убедитесь, что абсолютные пути и права корректно настроены в новой среде.

Краткое резюме

Запуск Windows‑программ из Bash даёт гибкость: вы можете комбинировать лучшие инструменты обеих платформ. Следите за правами, экранируйте специальные символы и тестируйте сценарии на этапе разработки. Для GUI‑программ и 16‑битных приложений используйте альтернативные подходы.

Важно: всегда проверяйте, что ваш скрипт не раскрывает чувствительные данные при передаче аргументов в cmd.exe.

Ключевые шаги — использовать путь через /mnt, экранировать пробелы, добавлять каталоги в PATH при необходимости и применять cmd.exe /C для встроенных команд.

Критерии приёмки

  • Все примеры выполняются в тестовой среде без ошибок.
  • Команды корректно принимают аргументы и работают с ожидаемым выводом.
  • Скрипты безопасно обрабатывают внешние входные данные и не требуют лишних прав.

1‑строчный глоссарий

  • WSL: Windows Subsystem for Linux, подсистема для запуска Linux внутри Windows.
  • /mnt/c: точка монтирования диска C в среде Bash.
  • /C: флаг для cmd.exe, выполняющий указанную команду и завершающийся.

Социальный превью (рекомендация)

OG заголовок: Запуск Windows‑программ из Bash в Windows 10 OG описание: Запускайте .exe из Bash, передавайте аргументы, добавляйте в PATH и комбинируйте выводы Windows и Linux команд.


Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство