Ярлык 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"
С другой стороны, если вы хотите запустить скрипт и вернуть свою оболочку, вам следует:
- Откройте оболочку как есть
- Редактировать или создать
~/.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!
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"