Предполагая, что у меня есть test.sh script, который запускает сервер и Git Bash, как создать ярлык Windows, который я могу дважды щелкнуть, чтобы запустить tesh.sh в Git Bash на переднем плане и позволяет мне видеть выходные данные сервера?
Ярлык Windows для запуска скрипта Git Bash
Ответ 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 впоследствии
- Окно останется открытым после выхода из скрипта
Сделайте следующее:
-
Например, создайте ярлык для
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
завершается немедленно, если конвейер возвращает ненулевое состояние (дополнительная информация).
Ответ 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"