Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Если вы хотите выполнить (и выйти) оболочку script в контексте оболочки, укажите ее в командной строке. Фокус в том, что когда имя файла script интерпретируется, он использует путь 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"

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

  • Откройте оболочку как есть
  • Отредактируйте или создайте ~/.profile (попробуйте vi ~/.profile)
  • Добавьте эту строку: ~/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!

[email protected] ~
$

Ответ 2

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

Как создать ярлык 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 заменит текущий shell с оболочкой входа Bash.

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

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

Ответ 3

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

  • Вызывает правильную оболочку
  • Нет ненужных окон
  • Вызывает скрипт 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 завершается немедленно, если конвейер возвращает ненулевое состояние (дополнительная информация).

Ответ 4

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