如何使用 Cygwin 从 cmd 文件在当前目录中 运行 bash 脚本?

How to run bash script in the current directory from cmd-file by using Cygwin?

如何使用 Cygwin 从命令文件 运行 bash 当前目录中的脚本?

它不起作用 - 我的文件 script.cmd 包含:

c:\cygwin64\bin\bash -l -c '%CD%/my_script.sh'

输出

E:\mydir>c:\cygwin64\bin\bash -l -c 'E:\mydir/my_script.sh'
/usr/bin/bash: E:mydir/my_script.sh: No such file or directory

答案:

我可以成功使用这样的命令:

在返回的错误消息中,您显示 E:mydir 之间的反斜杠消失了,这让我假设 bash 使用了转义字符。

Windows 命令提示符 (cmd) 但是使用反斜杠作为路径分隔符,因此 %CD% 包含这样的内容。但是,bash 需要正斜杠作为路径分隔符。

因此,要用正斜杠替换所有反斜杠,请使用 sub-string substitution,如下所示:

c:\cygwin64\bin\bash -l -c '%CD:\=/%/my_script.sh'

如果单引号也有问题,请使用双引号:

c:\cygwin64\bin\bash -l -c "%CD:\=/%/my_script.sh"

分两步解决,先把%CD%转换成cygpath 然后用 POSIX 格式

转换后的路径调用 bash
FOR /F %%I IN ('c:\cygwin64\bin\cygpath -c -u %CD%') DO SET CDU=%%I
c:\cygwin64\bin\bash -l -c %CDU%/my_script.sh