我知道Cygwin安装时有一个批处理文件用于在Windows中启动它。但是如果我想在不启动Cygwin的情况下运行脚本并执行“./script”
如何创建批处理文件来执行此操作?
在...中只有一个批处理文件,单击它时,打开Cygwin并运行shell脚本。
答案 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