Cygwin запускает скрипт из одного пакетного файла? - PullRequest
18 голосов
/ 27 ноября 2011

Я знаю, что при установке Cygwin существует пакетный файл, который используется для его запуска в Windows. Но если я хочу запустить скрипт без запуска Cygwin и выполнения "./script"

Как мне создать командный файл для этого?

Как и в ... просто есть один пакетный файл, который при нажатии открывает Cygwin и запускает скрипт оболочки.

Ответы [ 6 ]

27 голосов
/ 01 мая 2012

Чтобы запустить «foo.bsh», создайте командный файл со следующим содержимым и запустите его:

    set PATH=C:\cygwin\bin;%PATH%
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh

Часть «C: \ cygwin \ bin» может отличаться в зависимости от выбранного места установки cygwin.

9 голосов
/ 09 февраля 2013

Вы можете попробовать что-то подобное для перехода на батуте из CMD в BASH (или любой другой вариант sh):

    : <<TRAMPOLINE
    @echo off
    bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1)
    bash "%~f0" "%*" 
    goto :EOF 
    TRAMPOLINE
    #####################
    #!/bin/bash  -- it's traditional!
    echo "Hello from $SHELL"
6 голосов
/ 20 марта 2014

Я хотел бы расширить ответ, данный Остином Гастингсом, чтобы позволить ему работать без Cygwin в пути и работать в настройке каталога с файлом bat (так что даже ярлык с другим путем «Начать с») используется). Изменения должны включать полный путь к bash, использовать опцию -l, чтобы правильно настроить bash с путями и средой, и передать текущий каталог в bash в качестве первого аргумента, который извлекается (используя shift). Не забудьте использовать в файле новые строки Unix, иначе вы получите много ошибок. Также используйте UTF8 вместо ANSI.

: <<TRAMPOLINE
@echo off
C:\cygwin\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1)
setlocal EnableDelayedExpansion
for %%i in (%*) do set _args= !_args! "%%~i"
C:\cygwin\bin\bash -l "%~f0" "%CD%" %_args%
goto :EOF 
TRAMPOLINE
#####################
#!/bin/bash  -- it's traditional!
cd "$1"
shift
echo Working from $PWD

Редактировать: Исправлен код батута для правильной передачи аргументов bash. BAT-файлы не имеют bash-эквивалента «$ @», и цикл обработки каждого аргумента выполняется, а затем передается bash.exe. Теперь правильно обрабатывает аргументы с пробелами.

3 голосов
/ 27 ноября 2011

Что за сценарий оболочки?Bash?Если вам нужно запустить скрипт bash, просто запустите его с помощью bash.exe через ярлык.Цель будет выглядеть примерно так:

C:\cygwin\bin\bash.exe foo.bsh

Путь к bash.exe будет зависеть от того, где был установлен Cygwin.(Вам вообще не нужен путь, если каталог bin находится в переменной окружения пути.)

Вы можете сделать то же самое в пакетном скрипте, если хотите.Командная строка будет такой же, как «target» выше.


РЕДАКТИРОВАТЬ НА ОСНОВЕ КОММЕНТАРИЙ (все еще предполагается bash):

Хорошо, так что в вашем пакетеСценарий (.bat) просто введите:

bash.exe script.txt

Возможно, вам потребуется добавить путь к «bash.exe».Если вы не уверены, где находится «bash.exe», откройте файл «Cygwin.bat», который вы упомянули в своем вопросе.У него должен быть путь в команде chdir.(Примечание: Cygwin.bat просто запускает bash.exe в интерактивном режиме. На самом деле он не запускает ничего с именем «cygwin».)

Вам также необходимо добавить путь к «script.txt», если он ненаходится в том же каталоге, что и ваш пакетный скрипт.

Опять же, это также будет работать в ярлыке вместо пакетного скрипта.

2 голосов
/ 10 сентября 2017

Если вы также хотите открыть скрипт в мятных окнах, это (основываясь на ответе @ galmok) сделает свое дело.

: <<TRAMPOLINE
@echo off
C:\Users\user\Downloads\cyg-packages\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1)
setlocal EnableDelayedExpansion
for %%i in (%*) do set _args= !_args! "%%~i"
C:\Users\user\Downloads\cyg-packages\bin\mintty.exe -i /Cygwin-Terminal.ico C:\Users\user\Downloads\cyg-packages\bin\bash -l "%~f0" "%CD%" %_args%
goto :EOF 
TRAMPOLINE
#####################
#!/bin/bash  -- it's traditional!
cd "$1"
shift
echo Working from $PWD
vim "$@"

Примечание: мой вариант использования заключался в необходимости открытьтерминал vim из Visual Studio, поэтому в конце вызывается vim.Пакетный файл будет завершен позже.

0 голосов
/ 02 сентября 2016

Чтобы запустить «your_bash_file» из любого файла .bat, напишите следующую строку в .bat:

git-bash.exe (path_to_your_bash_file>)

PS Необходим Windows Git установлен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...