Cygwin从一个批处理文件运行脚本?

Aar*_*ron 18 bash cygwin batch-file

我知道Cygwin安装时有一个批处理文件用于在Windows中启动它.但是,如果我想在不启动Cygwin并执行"./script"的情况下运行脚本

如何创建批处理文件来执行此操作?

在...中只有一个批处理文件,单击时打开Cygwin并运行shell脚本.

Jak*_*ron 27

要运行"foo.bsh",请创建包含以下内容的批处理文件并运行它:

    set PATH=C:\cygwin\bin;%PATH%
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh
Run Code Online (Sandbox Code Playgroud)

"C:\ cygwin\bin"部分可能因您选择的cygwin安装位置而异.


Aus*_*ngs 9

你可以尝试这样的东西从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"
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说效果很好,但我发现我在保存文件时必须使用 UNIX 样式的行结尾以确保 bash 脚本正常运行。 (2认同)

gal*_*mok 7

我想扩展Austin Hastings给出的答案,允许它在路径中没有Cygwin的情况下工作,并使用bat文件在目录设置中工作(所以即使是使用不同的"Start in"路径的快捷方式) .更改包括bash的完整路径,使用选项-l使路径和环境正确设置bash,并将当前目录作为弹出的第一个参数(使用shift)传递给bash .记得在文件中使用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
Run Code Online (Sandbox Code Playgroud)

编辑:修复了trampoline代码将参数正确传递给bash.BAT文件没有相当于"$ @"的bash,并且处理每个参数的循环然后传递给bash.exe.现在正确处理带空格的参数.