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

时间:2011-11-27 04:34:37

标签: bash batch-file cygwin

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

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

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

6 个答案:

答案 0 :(得分:27)

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

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

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

答案 1 :(得分: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"

答案 2 :(得分:6)

我想扩展Austin Hastings给出的答案,允许它在路径中没有Cygwin的情况下工作,并使用bat文件在目录设置中工作(所以即使是一个不同的快捷方式&#34 ;开始于&#34;使用路径)。更改包括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

编辑:修复了trampoline代码将参数正确传递给bash。 BAT文件的bash等价于&#34; $ @&#34;并且处理每个参数的循环然后传递给bash.exe。现在用空格正确处理参数。

答案 3 :(得分:3)

什么样的shell脚本?击?如果您需要运行bash脚本,只需通过快捷方式使用bash.exe运行它。目标将是:

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

bash.exe的路径取决于cygwin的安装位置。 (如果bin目录在路径环境变量中,则根本不需要路径。)

如果需要,您可以在批处理脚本中执行相同的操作。命令行与上面的“目标”相同。


基于评论的编辑(仍然假设bash):

好的,所以在你的批处理脚本(.bat)中输入:

bash.exe script.txt

您可能需要添加“bash.exe”的路径。如果您不确定“bash.exe”的位置,请打开您在问题中提到的“Cygwin.bat”文件。它应该具有chdir命令中的路径。 (注意:Cygwin.bat只是在交互模式下运行bash.exe。它并没有真正运行任何名为“cygwin”的东西。)

如果它与批处理脚本不在同一目录中,您还需要添加“script.txt”的路径。

同样,这也适用于快捷方式而不是批处理脚本。

答案 4 :(得分:2)

如果你想在一个薄薄的窗口中打开脚本,这(基于@ galmok&#39;答案)就可以了。

: <<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 "$@"

注意:我的用例是需要从Visual Studio打开终端vim,这就是最后调用vim的原因。批处理文件将在之后退出。

答案 5 :(得分:0)

运行&#34; your_bash_file&#34;从任何.bat文件中,将以下行写入.bat:

git-bash.exe(path_to_your_bash_file&gt;)

P.S。必须安装Windows Git

相关问题