Ярлык Windows для запуска скрипта Git Bash

Предполагая, что у меня есть сценарий test.sh, который запускает сервер и установлен Git Bash, как мне создать ярлык Windows, который я могу дважды щелкнуть, чтобы запустить tesh.sh в Git Bash на переднем плане и позволяет мне видеть вывод сервера ?


person konyak    schedule 04.02.2014    source источник


Ответы (4)


Git bash уже представляет собой командный файл с содержимым, подобным этому:

C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i"

Если вы хотите запустить (и оставить запущенным) сценарий оболочки в контексте оболочки, укажите его в командной строке. Хитрость заключается в том, что при интерпретации имени файла скрипта используется путь Windows, а не эквивалентный путь в среде sh/Git.

Другими словами, чтобы запустить файл D:\temp\test.sh в оболочке Git и оставить его работающим, создайте этот пакетный файл:

C:\WINNT\system32\cmd.exe /c ""C:\Git\bin\sh.exe" --login -i -- D:\temp\test.sh"

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

  1. Откройте оболочку как есть
  2. Отредактируйте или создайте ~/.profile (попробуйте vi ~/.profile)
  3. Добавьте эту строку: ~/test.sh (при необходимости укажите путь)

Итак, с .profile это выглядит так:

echo Executing .profile
/bin/sh ~/test.sh

И test.sh выглядит так:

echo Hello, World!

Вы получите это приглашение:

Welcome to Git (version 1.7.11-preview20120710)


Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.
Executing .profile
Hello, World!

ixe013@PARALINT01 ~
$
person ixe013    schedule 05.02.2014
comment
Круто, после того, как я пересмотрел вопрос, я понял, что мне не нужно возвращаться к приглашению оболочки Gish Bash после выполнения сценария. - person konyak; 05.02.2014
comment
Есть ли способ подавить четыре строки «Добро пожаловать в Git...» в начале? - person BillyTom; 31.05.2016
comment
Для многих это будет C:\Windows\System32\cmd.exe /c ""C:\Program Files\Git\bin\sh.exe" --login -i -- D:\temp\test.sh" - person Hannes Schneidermayer; 09.04.2017
comment
Использование -i при одновременном указании сценария для выполнения в основном бессмысленно - экземпляр bash не останется открытым, и для сценария он будет выглядеть так, как будто он запускается в интерактивной оболочке, что в лучшем случае не имеет значения, и может привести к другому поведению в худшем случае. Вы должны четко указать, что ваше решение на основе профиля будет вызывать сценарий для всех будущих оболочек входа в систему, что может быть нежелательно. - person mklement0; 10.04.2017
comment
Кроме того, запустив скрипт в обычном окне консоли, в котором по умолчанию используется кодовая страница Windows OEM, вы можете столкнуться с проблемами кодировки символов. - person mklement0; 10.04.2017
comment
Если оставить в стороне другие проблемы, промежуточный пакетный файл не нужен; файл ярлыка, по запросу OP, может использовать эту команду напрямую (cmd.exe не обязательно): "C:\Program Files\Git\bin\sh.exe" -l D:\temp\test.sh - person mklement0; 10.04.2017

Другие ответы работают, но есть более короткое решение, которое полностью отвечает на вопрос, а именно:

Как создать ярлык Windows, который я могу дважды щелкнуть, чтобы запустить tesh.sh в Git Bash

Ответ: добавьте следующую команду в поле Target: ярлыка:

"C:\Git\bin\sh.exe" -l "D:\test.sh"

введите здесь описание изображения

Где -l — это сокращение от --login.

Чтобы лучше понять, что делает эта команда, обратитесь к официальной документации GNU по вызову Bash. :

  • -l (--login): заставить эту оболочку действовать так, как если бы она была вызвана напрямую при входе в систему. Когда оболочка является интерактивной, это эквивалентно запуску оболочки входа в систему с exec -l bash. Когда оболочка не является интерактивной, будут выполняться файлы запуска оболочки входа в систему. exec bash -l или exec bash --login заменит текущую оболочку на оболочку входа Bash.

Также обратите внимание, что:

  • Вам либо нужен полный путь к sh.exe, либо он указан в вашей переменной среды PATH (как уже указывали другие).
  • Если вам действительно нужно принудительно вызвать оболочку в интерактивном режиме, вы можете добавить параметр -i
  • Последний параметр — это путь к скрипту, который необходимо выполнить. Этот путь должен быть в формате Windows.
person quasoft    schedule 28.02.2016
comment
+1 Отлично. Только один дополнительный совет: сохраните свой *.sh-скрипт как UTF-8 (нет Windows 1252 как блокнот и нет UTF8-BOM как Visual Studio!) - person Marcel; 17.03.2017
comment
Обратите внимание, что это автоматически закроет окно, когда сценарий завершится, поэтому ваш ответ не удовлетворяет требованиям, позволяющим мне увидеть вывод требования сервера. Кроме того, запустив скрипт в обычном окне консоли, в котором по умолчанию используется кодовая страница Windows OEM, вы можете столкнуться с проблемами кодировки символов. - person mklement0; 10.04.2017

Лучшее решение на мой взгляд:

  • Вызывает правильную оболочку
  • Нет лишних окон
  • После этого вызывает скрипт bash
  • Окно останется открытым после выхода скрипта

Сделайте следующее:

  1. Например, создайте ярлык для mintty.exe на рабочем столе. Он находится под %installation dir%/Git/usr/bin/mintty.exe

  2. Изменить свойства ярлыка и изменить цель (сохранить путь):

"C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'


Пояснение к параметрам:

-h always сохраняет окно открытым после завершения скрипта, поэтому окно не исчезнет, ​​пока вы все еще читаете вывод (удалите, если вам не нужно читать вывод и вы хотите, чтобы окно закрывалось автоматически).

-l заставляет эту оболочку действовать так, как если бы она была вызвана непосредственно при входе в систему.

-e немедленно завершает работу, если конвейер возвращает ненулевой статус (подробнее< /а>).

person Hannes Schneidermayer    schedule 09.04.2017
comment
Хороший. И при необходимости не забудьте установить Start in — текущий каталог при запуске скрипта. - person Qwertie; 06.06.2019

Я бы рекомендовал использовать переменную окружения %ComSpec% вместо абсолютного пути к cmd:

%ComSpec% /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"

или даже просто команду cmd, которая обычно доступна из %PATH%:

cmd /c ""C:\Program Files (x86)\Git\bin\sh.exe" --login -i"

если ваш C:\Program Files (x86)\Git\bin добавлен к PATH (что также является распространенным решением и одним из случаев установки TortoiseGit), вы можете использовать просто:

cmd /c "sh --login -i"
person radistao    schedule 11.07.2015
comment
Пришлось использовать cmd.exe (с расширением .exe), иначе не запускалось. - person Jon; 14.04.2016
comment
проверьте переменную среды PATHEXT, она должна быть примерно такой: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC. - person radistao; 15.04.2016
comment
Если вы создаете файл ярлыка в соответствии с запросом OP, cmd.exe вообще не нужно вмешиваться. - person mklement0; 10.04.2017