Резюме
Вы правы, Git Bash для Windows - это не просто bash
скомпилированный для Windows. Это пакет, который содержит bash
(который является оболочкой командной строки) и набор других, отдельных * nix-утилит, таких как ssh
, scp
, cat
, find
и другие (которые вы запускаете с помощью оболочки), скомпилированные для Windows, и новый окно терминала интерфейса командной строки называется mintty
.
В двух словах
В Windows вы можете запускать такие команды, как ipconfig /all
или format G:
using cmd.exe
. Эти команды являются действительными исполняемыми файлами в C:\Windows\system32
, которые хранятся как файлы ipconfig.exe
и format.com
. cmd.exe
отдельно от обоих и загружает и запускает их по запросу пользователя.
ssh
, scp
, cat
, find
запускаются с использованием bash
точно так же. Они обычно хранятся в /usr/bin
а не в C:\Windows\system32
в системах * nix, поскольку структура системных файлов в Windows и * nix организована по-разному.
В случае Git Bash для Windows эти программы находятся в папке установки Git: C:\Program Files\Git\usr\bin
, которую также можно найти в эмулируемой среде Linux в каталоге /usr/bin
.
Точно так же, как возможность просто запустить cmd.exe
в * nix не позволяет вам много делать без других системных утилит, просто возможность запускать Bash в Windows тоже не очень полезна. Это означает, что все эти дополнительные команды должны быть объединены вместе с Bash, чтобы создать полезный программный пакет.
Подробности: приложения POSIX в Windows
Обычно эти дополнительные команды можно найти в системах * nix, а не в Windows, потому что они были запрограммированы в соответствии с API программирования POSIX (который используется в * nix), а не в API Win32 (который используется в Windows). Документация по POSIX API доступна в открытом доступе, поэтому некоторые люди перенесли ее на другие системы, включая Windows. Windows-реализация API / библиотек POSIX предоставляется Cygwin
и MSYS
.
Это похоже на то, что делает проект Wine , но он конвертирует POSIX-> Windows, а не Windows-> POSIX, как Wine.
mintty
mintty
включен потому, что в cmd.exe
, окне командной строки Windows по умолчанию, отсутствуют некоторые важные функции, которые обычно доступны в большинстве систем * nix. В большинстве случаев mintty
- лучший выбор для запуска команд (конечно, для утилит, поставляемых с пакетом Git Bash для Windows), но иногда системное приложение Windows может лучше работать с cmd.exe
.