Ярлык Windows для запуска скрипта git bash

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

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 ~
$

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

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

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

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

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

Куда, -l это сокращение для --login,

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

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

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

  • Вам либо нужен полный путь к sh.exe или есть в вашем PATH переменная окружения (как уже отмечали другие).
  • Если вам действительно нужно принудительно вызвать оболочку в интерактивном режиме, вы можете добавить -i вариант
  • Последний параметр - это путь к сценарию, который должен быть выполнен. Этот путь должен быть в формате Windows.

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

Вызывает правильную оболочку, без лишних окон и впоследствии запускает скрипт bash; окно останется открытым после выхода скрипта:

  • Создать ярлык для mintty.exe на вашем рабочем столе, например

  • Отредактируйте свойства ярлыка и измените цель (оставьте путь):

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

Объяснение параметров:

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

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

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

Я бы порекомендовал использовать переменную среды %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"
Другие вопросы по тегам