Как запускать программы Windows из Bash Shell в Windows 10
В Creators Update оболочка Bash в Windows 10 теперь позволяет запускать двоичные файлы Windows и стандартные команды командной строки прямо из Bash. Вы можете запускать программы для Linux и Windows из одной оболочки Bash или даже включать команды Windows в сценарий Bash..
Что тебе нужно знать
Вот некоторые основные детали, которые вам нужно знать об этой функции:
- Учетная запись пользователя: Программы, запущенные из оболочки Bash, будут работать так, как если бы они запускались текущей учетной записью пользователя Windows.
- права доступаЭти программы будут иметь те же разрешения, что и процесс Bash.exe. Итак, если вы хотите, чтобы эти команды имели доступ администратора, вам нужно запустить оболочку Bash от имени администратора.
- Рабочий каталогПрограммы Windows используют один и тот же «рабочий каталог», что и оболочка Bash. Таким образом, если вы запустите команду, которая перечисляет содержимое текущего каталога, она отобразит содержимое текущего рабочего каталога в оболочке Bash. Использовать
CD
команда для изменения рабочих каталогов.
Имея это в виду, давайте посмотрим, как запустить программу.
Как запустить программу Windows
Чтобы запустить программу Windows, введите путь к файлу .exe программы в оболочке Bash. Помните, что ваш диск Windows C: доступен на / mnt / c в Bash. Среда Bash также чувствительна к регистру, поэтому вы должны указать правильную прописную букву.
Допустим, вы хотели запустить утилиту Ping, расположенную в C: \ Windows \ System32 \ PING.EXE. Вы бы запустили следующую команду:
/mnt/c/Windows/System32/PING.EXE
Следующая команда не будет работать, потому что Bash чувствителен к регистру:
/mnt/c/windows/system32/ping.exe
Это немного сложнее, если путь содержит сложные символы, такие как пробелы и скобки, например папки Program Files. Вы должны «экранировать» пробелы, скобки и другие сложные символы, ставя перед ними префикс «\».
Например, предположим, что вы хотите запустить программу Internet Explorer, расположенную в C: \ Program Files (x86) \ Internet Explorer \ iexplore.exe. Вы должны выполнить следующую команду в Bash:
/ mnt / c / Program \ Files \ \ (x86 \) / Internet \ Explorer / iexplore.exe
Обратите внимание на «\» перед символами пробела и скобок. Эти символы должны быть «экранированы», иначе Bash не поймет, что символы являются частью пути к файлу..
Как передать аргумент команде
Оболочка Bash передает аргументы непосредственно командам, которые вы выполняете.
Например, если вы хотите пропинговать example.com, вы должны выполнить:
/mnt/c/Windows/System32/PING.EXE example.com
Или, если вы хотите открыть файл хостов Windows в Блокноте, вы должны выполнить:
/mnt/c/Windows/System32/notepad.exe "C: \ Windows \ System32 \ drivers \ etc \ hosts"
Вы используете стандартный путь к файлу Windows при передаче пути к файлу непосредственно программе Windows. Это потому, что Bash передает аргумент напрямую. Notepad.exe и другие программы Windows ожидают путь к файлу Windows.
Как запустить встроенную команду
Некоторые команды Windows не являются файлами .exe, но встроены в саму командную строку. Например, это включает в себя реж
команда, которую вы обычно можете запустить в командной строке. Чтобы запустить такую команду, вам нужно запустить cmd.exe
двоичный файл, связанный с командной строкой и передающий ей команду в качестве аргумента с / C, например так:
/mnt/c/Windows/System32/cmd.exe / C команда
Например, чтобы запустить реж
Команда, встроенная в командную строку, позволяет выполнить следующую команду:
/mnt/c/Windows/System32/cmd.exe / C dir
Как добавить каталоги в путь
Среда Windows Services for Linux обрабатывает исполняемые файлы Windows аналогично тому, как она обрабатывает двоичные файлы Linux. Это означает, что вы можете добавить в путь каталог, содержащий файлы .exe, а затем выполнить эти файлы .exe напрямую. Например, чтобы добавить каталог System32 к вашему пути, вы должны выполнить:
экспорт PATH = $ PATH: / mnt / c / Windows / System32
Затем вы можете запустить файлы .exe Windows, расположенные непосредственно в папке System32, например, так:
PING.exe example.com
notepad.exe
cmd.exe / C dir
Как передать вывод одной команды в другую
Вывод команды Windows может быть передан в команду Linux, и наоборот. Например, вы можете использовать ipconfig.exe -all
команда, чтобы вывести список ваших сетевых интерфейсов и передать его в Linux Grep
Команда для поиска на выходе. Например, чтобы просмотреть всю информацию о вашем соединении и выполнить поиск разделов, соответствующих «IPv4-адресу», вы должны выполнить:
/mnt/c/Windows/System32/ipconfig.exe -all | grep "Адрес IPv4"
Это основной процесс. Эти команды также будут работать при включении в сценарий Bash, поэтому вы можете написать сценарий Bash, который включает в себя как команды Windows, так и утилиты Linux. Если он работает в оболочке Bash, он будет работать в сценарии Bash.
И, если вы хотите пойти другим путем, вы можете использовать команду «bash -c» для запуска команд Bash из стандартной командной строки Windows..