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

Краткие ссылки
- Что нужно знать
- Как запустить 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 чувствителен к регистру.

Если путь содержит пробелы или специальные символы (например 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.

Совет: если передаёте много файлов или пути формируются динамически, соберите их в переменную 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 удобнее в скриптах.

Как добавить директории в PATH
WSL (Windows Subsystem for Linux) обрабатывает Windows‑исполняемые похожим образом, как Linux‑бинарники. Вы можете добавить папку с .exe в переменную PATH и запускать .exe по имени.
Пример: добавить System32 в PATH на текущую сессию:
export PATH=$PATH:/mnt/c/Windows/System32После этого можно запускать утилиты напрямую:
PING.exe example.comnotepad.execmd.exe /C dirЧтобы сделать изменение постоянным, добавьте строку export PATH=... в ваш ~/.bashrc или ~/.profile.

Как перенаправить вывод одной команды в другую
Вы можете пайпать вывод 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)
- Откройте Bash как обычный пользователь.
- Выполните
/mnt/c/Windows/System32/PING.EXE example.com— ожидаемый вывод: ответы ping. - Попробуйте
notepad.exe "C:\Windows\System32\drivers\etc\hosts"— Блокнот должен открыть файл. - Запустите
cmd.exe /C dir— список файлов текущей директории. - Выполните
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 команд.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone