Как запустить Git Bash из командной строки DOS?

106

У меня есть то, что я надеюсь, простой вопрос, но я еще не смог найти ответ. Я хочу запустить Git Bash из командного файла DOS. Вот что я пробовал до сих пор:

  1. Запустил Git Bash из кнопки Пуск в Win 7
  2. Используется CTRL + ALT + DEL, чтобы идентифицировать процесс как "sh.exe"
  3. Запустил sh.exe из командного файла с помощью команды запуска

    start sh.exe
    

Однако при этом не запускается полная среда Git Bash. Git Bash обычно имеет «Mingw32» в строке заголовка, но sh.exe имеет полный путь к ... Git\bin\sh.exe. Мне кажется, что есть некоторые наложения или зависимости, о которых я, возможно, не знаю, которые также необходимо загрузить (втянуть? Импортировать?).

Это был один из лучших результатов, которые я нашел при поиске в Интернете, но он не имеет для меня полного смысла, и я не уверен, применим ли он именно к моей ситуации:

Запуск git из строки Windows Cmd: где ключевые файлы?

Я новичок в мире пакетных сценариев DOS.

Эрик Хепперле - CodeSlayer2010
источник
1
Ну, на самом деле это не командная строка DOS, если: (a) Вы не столкнулись с какой-то временной аномалией и не используете Windows 9x / ME, command.comединственную оболочку, включенную в ОС. (B) Вы используете 32- bit NT-система и либо вызвала command.comсебя, либо старая программа сделала это за вас. См. В чем разница между CMD и командной строкой в ​​Windows? для получения дополнительной информации.
SamB

Ответы:

126

Если вы хотите запустить из пакетного файла:

  • для x86

    start "" "%SYSTEMDRIVE%\Program Files (x86)\Git\bin\sh.exe" --login
    
  • для x64

    start "" "%PROGRAMFILES%\Git\bin\sh.exe" --login
    
Эндоро
источник
Спасибо @Endoro! Хотя ответ @Klas Mellbourn был правильным для Powershell, ваш ответ более правильный, поскольку я запускаю из командного файла DOS. Добавление директивы start заставляет программу выполняться асинхронно, что мне и нужно! Недурно!
Эрик Хепперле - CodeSlayer2010
14
Есть ли способ ввести и выполнить команду в окне пакетной обработки Git после ее открытия из пакетного файла?
Ник
1
@OviC Вы уверены, что отредактировали правильно? «Program Files (x86)» существует только в архитектуре x64 для 32-битных программ.
Drunix
@Drunix, вы правы, в системах x86 нет пути "Program Files (x86) \". Сделал откат. Спасибо.
Endoro 01
Что делать, если он не установлен на системном диске? Что делать, если он не установлен в программных файлах?
Майкл Круглос,
44

Я не совсем понимаю, что вы подразумеваете под «полной средой Git Bash», но получаю приятное сообщение, если

"C:\Program Files\Git\bin\sh.exe" --login

В PowerShell

& 'C:\Program Files\Git\bin\sh.exe' --login

--loginПереключатель делает оболочка выполнять шелл загрузочные файлы .

Клас Меллборн
источник
Спасибо, @Klas Mellbourn. Ваш ответ хорош для Powershell, но без добавления директивы «start», как в ответе Endoro, он останавливает выполнение следующей программы до тех пор, пока оболочка не будет завершена, что не является желаемым поведением, иначе я бы проголосовал за вас.
Эрик Хепперле - CodeSlayer2010
Я использую Console2 для окна cmd, и это вызывает странное поведение. Я поместил это в файл .bat, и теперь все хорошо:@"%SYSTEMDRIVE%\Program Files\Git\bin\bash.exe" --login
Grault 03
25

Я предпочитаю использовать git-bash.exe вместо sh.exe.

start "" "%ProgramFiles%\Git\git-bash.exe" -c "tail -f /c/Windows/win.ini"

Вы можете перестать закрывать окно при звонке /usr/bin/bash --login -iв конце;

start "" "%ProgramFiles%\Git\git-bash.exe" -c "echo 1 && echo 2 && /usr/bin/bash --login -i"

Примечание: я не уверен, что это хороший способ :)

Куджи
источник
4
Хороший ответ, но окно git-bash сразу закрывается. Вы знаете, как отключить автоматическое закрытие после завершения выполнения команды?
Марк
@Mark Спасибо, Марк. Я добавил пример к своему ответу выше. К сожалению, я не уверен, как мы должны это делать правильно, потому что я не
сторонник
1
[code] start "" "% ProgramFiles% \ Git \ git-bash.exe" [/ code] отлично работает!
PauAI
@PauAI 2018 now ... Я пробовал start "" "%ProgramFiles%\Git\git-bash.exe"из командной строки администратора, и хотя он вызывает Git Bash в новом окне, набрав простую команду, например, не lsдает никаких результатов. Этот метод, похоже, не позволяет выполнять команды Linux. ... EDIT: сработало, просто потребовалось много времени (2 минуты) для запуска ls. Затем ls снова запустился менее чем за 1 секунду. ... странно.
Эрик Хепперле - CodeSlayer2010
8

Я предпочитаю помещать git в переменную среды и просто вызывать

c:\Users\[myname]>sh
or 
c:\Users\[myname]>bash

Шаги по созданию переменной среды (Win7)

  • На рабочем столе щелкните правой кнопкой мыши значок «Компьютер».
  • Выберите «Свойства» в контекстном меню.
  • Щелкните ссылку Дополнительные параметры системы.
  • Щелкните Переменные среды.
  • В разделе Пользовательские переменные нажмите кнопку NEW, введите имя переменной как GIT_HOME, значение как (папка-где-вы-установили-git).

    • для меня это было c:\tools\git, у других может бытьC:\Program Files\Git
  • найдите PATHпеременную среды и выберите ее. Щелкните Редактировать. (Если переменная среды PATH не существует, нажмите «Создать»).

  • В окне редактирования добавьте новое значение %GIT_HOME%и %GIT_HOME%\bin. Щелкните ОК. Закройте все оставшиеся окна, нажав ОК.
  • [Убедитесь, что вы закрыли CMD, который хотите использовать для git]
  • откройте новую командную строку и просто введите shили bashилиgit-bash
старый монах
источник
2
Спасибо! Мне удалось заставить это работать с GIT_HOME as C:\Program Files\Gitи печатать git-bashиз CMD. Кроме того, как ни странно, хотя вам нужно только ввести PATH, чтобы увидеть его содержимое, чтобы увидеть содержимое этой пользовательской переменной git, вы должны ввестиecho %GIT_HOME%
Эрик Хепперле - CodeSlayer2010
Спасибо, это было отличное дополнение. Чтобы добавить к этому, когда у вас есть GIT_HOMEпеременная и вы используете git-bashкоманду (или git-cmd), она откроет ее в новом окне. Если вы добавите переменную среды «PATH», она переключится в существующее окно. Вы также можете ввести « exitвыйти из системы» git bash и по-прежнему сохранить приглашение DOS.
Кейт Э.
4
start "" "%SYSTEMDRIVE%\Program Files (x86)\Git\bin\sh.exe" --login -i

Откроется Git bash.

user3616334
источник
3

https://stackoverflow.com/a/33368029/15789

Я разместил здесь ответ.

Откройте командное окно Windows и выполните этот сценарий. Если в вашем рабочем каталоге произошли изменения, он откроет терминал bash в вашем рабочем каталоге и отобразит текущий статус git. Он держит окно bash открытым, вызывая exec bash.

Если у вас несколько проектов, вы можете создать копии этого сценария с другой папкой проекта и вызвать его из основного пакетного сценария.

RuntimeException
источник
3

Я использовал информацию выше, чтобы помочь создать более постоянное решение. Следующее создаст псевдоним sh, который вы можете использовать для открытия Git Bash:

echo @start "" "%PROGRAMFILES%\Git\bin\sh.exe" --login > %systemroot%\sh.bat
dpate
источник
Спасибо, dpate! Я вставил ваш оператор echo в командную строку, запустил shи запустил окно git-bash, и я смог отлично запускать команды. Можете добавить немного подробностей к вашему ответу, объясняя, как это работает? Я лучше узнаю, как работает рыбалка, чем если бы кто-нибудь дал мне рыбу, и я думаю, что это принесет пользу другим, ищущим хороший ответ. спасибо
Эрик Хепперле - CodeSlayer2010
0

Ответ Endoro устарел, и я не могу комментировать;

# if you want to launch from a batch file or the command line:

start "" "%ProgramFiles%\Git\bin\sh.exe" --login
ThaJay
источник
0

Вы можете добавить путь git к переменным среды

  • Для x86

%SYSTEMDRIVE%\Program Files (x86)\Git\bin\

  • Для x64

%PROGRAMFILES%\Git\bin\

Откройте cmd и напишите эту команду, чтобы открыть git bash

sh --login

Вы можете увидеть это изображение в формате GIF для более подробной информации:

https://media1.giphy.com/media/WSxbZkPFY490wk3abN/giphy.gif

Eng_Farghly
источник