【问题标题】:How to run bash script in the current directory from cmd-file by using Cygwin?如何使用 Cygwin 从 cmd 文件在当前目录中运行 bash 脚本?
【发布时间】:2019-02-05 18:41:35
【问题描述】:

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

它不起作用 - 我的文件 script.cmd 包含:https://stackoverflow.com/a/17204645/1558037

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

答案:

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

  • c:\cygwin64\bin\bash -l -c "cd %CD:\=/%/; %CD:\=/%/my_script.sh"
  • c:\cygwin64\bin\bash -l -c "cd %CD:\=/%/; echo $PWD"

【问题讨论】:

  • 请不要为您的问题添加答案;如果您想分享您的解决方案,只需将其发布为答案;谢谢!

标签: windows batch-file command-line cygwin working-directory


【解决方案1】:

分两步解决,先将%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

【讨论】:

    【解决方案2】:

    在返回的错误消息中,您显示 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"
    

    【讨论】:

    • 我不知道单引号是否也有问题,因为cmd 只使用双引号,所以也许它们也需要更改,但我无法测试,对不起...
    猜你喜欢
    • 2023-01-12
    • 2013-06-26
    • 1970-01-01
    • 2023-03-14
    • 2012-05-19
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多