2014-02-04 2 views
34

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

ответ

55

Git Баш уже пакетный файл с содержанием примерно так:

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 (ajdust пути, если это необходимо)

Так с .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] ~ 
$ 
+0

Aw esome, после того как я пересмотрел вопрос, я понял, что мне не нужно его возвращать в приглашение оболочки Gish Bash после выполнения скрипта. – konyak

+0

Есть ли способ подавить четыре строки «Добро пожаловать в Git ...» в начале? – BillyTom

+1

Нашел его уже - это просто текстовый файл: etc/motd – BillyTom

5

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

cmd /c "sh --login -i" 
+0

Мне пришлось использовать cmd.exe (с расширением .exe), иначе он не будет работать. – Jon

+0

проверьте переменную varialbe в PATHEXT, это должно быть что-то вроде этого .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC – radistao

+0

'PATHEXT =. COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC; .PY; .PYW' – Jon

19

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

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

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

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

enter image description here

Где, -l является коротким для --login.

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

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

отметить также, что:

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

+1 Отлично. Еще один совет: Сохраните свой скрипт \ *. Sh как UTF-8 (** нет ** 'Windows 1252', как и блокнот, и ** нет **' UTF8-BOM', например Visual Studio!) – Marcel

+1

Обратите внимание, что это автоматически закрывает окно, когда сценарий завершается, поэтому ваш ответ не удовлетворяет требованию «позволяет мне видеть вывод сервера». Кроме того, запустив скрипт в обычном окне консоли, которое по умолчанию соответствует кодовой странице Windows OEM, вы можете столкнуться с проблемами кодировки символов. – mklement0

2

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

Запускает правую раковину, никаких ненужных окон и вызывает Баш скрипт впоследствии; окно будет оставаться открытым после того, как сценарий выходит:

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

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

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

+0

Хороший подход; Я предлагаю уточнить, что, хотя '-h всегда' держит _window_ открытым, _shell_ выходит, когда скрипт делает, поэтому окно эффективно доступно только для чтения в этой точке; Кроме того, я предлагаю удалить '-e' и, возможно, также' -l', потому что он не связан с вопросом OP (или, по крайней мере, _explain_, почему вы их добавили). – mklement0

Смежные вопросы