Предполагая, что у меня есть сценарий test.sh, который запускает сервер и установлен Git Bash, как мне создать ярлык Windows, который я могу дважды щелкнуть, чтобы запустить tesh.sh в Git Bash на переднем плане и позволяет мне видеть вывод сервера ?
Ярлык Windows для запуска скрипта 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 ~
$
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
-i
при одновременном указании сценария для выполнения в основном бессмысленно - экземпляр bash
не останется открытым, и для сценария он будет выглядеть так, как будто он запускается в интерактивной оболочке, что в лучшем случае не имеет значения, и может привести к другому поведению в худшем случае. Вы должны четко указать, что ваше решение на основе профиля будет вызывать сценарий для всех будущих оболочек входа в систему, что может быть нежелательно.
- person mklement0; 10.04.2017
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.
Windows 1252
как блокнот и нет UTF8-BOM
как Visual Studio!)
- person Marcel; 17.03.2017
Лучшее решение на мой взгляд:
- Вызывает правильную оболочку
- Нет лишних окон
- После этого вызывает скрипт bash
- Окно останется открытым после выхода скрипта
Сделайте следующее:
Например, создайте ярлык для
mintty.exe
на рабочем столе. Он находится под%installation dir%/Git/usr/bin/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"
cmd.exe
вообще не нужно вмешиваться.
- person mklement0; 10.04.2017