Подтвердить что ты не робот

Cygwin запускает script из одного пакетного файла?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Вы можете попробовать что-то подобное для батута от 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 traditional!
    echo "Hello from $SHELL"

Ответ 3

Я хотел бы расширить ответ, данный Остином Гастингсом, чтобы позволить ему работать без 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 traditional!
cd "$1"
shift
echo Working from $PWD

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

Ответ 4

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

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

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

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


РЕДАКТИРОВАТЬ НА ОТНОШЕНИИ КОММЕНТАРИЙ (по-прежнему предполагается bash):

Хорошо, поэтому в вашей партии script (.bat) просто введите:

bash.exe script.txt

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

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

Снова это также будет работать в ярлыке вместо пакета script.

Ответ 5

Если вы хотите открыть script в окнах монетного двора, это (на основе ответа @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 traditional!
cd "$1"
shift
echo Working from $PWD
vim "[email protected]"

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

Ответ 6

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

git - bash.exe(path_to_your_bash_file > )

P.S. Windows Git необходимо установить