【问题标题】:Why is it that Cygwin can run .bat scripts?为什么 Cygwin 可以运行 .bat 脚本?
【发布时间】:2009-04-24 20:47:42
【问题描述】:

当我在 Cygwin 中从 bash 执行 .bat 脚本时,它通过什么机制运行?我知道,如果我运行 .EXE,它将启动,无论 .EXE 是来自 Cygwin 还是来自更传统的环境。我知道当我使用 #! 执行可执行脚本时一开始,Cygwin 为其运行提供了魔力。

但为什么 .bat 脚本可以工作? Cygwin 内部是否有一些组件知道 Windows .bat 脚本是什么以及如何处理它?还是在 Windows 下无法执行调用来启动一个不会自动也适用于 .bat 脚本的 .EXE 文件?

【问题讨论】:

    标签: windows cygwin batch-file


    【解决方案1】:

    跑步

    ./test.bat params
    

    from bash 似乎等同于

    cmd /c test.bat params
    

    【讨论】:

      【解决方案2】:

      我相信 cygwin 中的 bash 将 bat 扩展视为标记为可执行文件(一个 cygwin hit-tip to windows 约定)。因此,它使用相关的解释器(cmd.exe,每个操作系统配置)加载并执行文件,就像它创建一个新的 bash 实例来运行你的 #!脚本(每个 posix 标准)。

      【讨论】:

      • 对于普通的 UNIX shell 脚本,它应该加载在 shebang 之后指定的程序,而不是盲目地使用 bash (并且指定 bash 的脚本可能不太便携:))
      • 这适用于 .bat 但不适用于 .ps1 (PowerShell)。 Cygwin 必须对 .bat 文件进行一些内置处理。
      【解决方案3】:

      如果你想像 ShellScript 进程一样分叉一个 *.cmd 文件执行并将他的日志附加到一个文件中:

      cmd /c test.bat > nohup.out &
      

      享受吧!

      【讨论】: