为什么Cygwin可以运行.bat脚本?

19

在Cygwin的bash中执行.bat脚本时,它是通过什么机制运行的?我知道如果我运行一个.EXE文件,它会启动,无论这个.EXE文件是来自Cygwin还是传统环境。我也知道当我执行具有#!开头的可执行脚本时,Cygwin会提供必要的支持使其运行。

但是为什么.bat脚本能够工作呢?是Cygwin内部有一个组件知道Windows .bat脚本是什么以及如何处理它吗?还是在Windows下执行调用启动.EXE文件的命令对于.bat脚本也同样适用,不存在不兼容的情况?

3个回答

13

运行

./test.bat params

在bash中似乎等同于

cmd /c test.bat params

12

我相信在cygwin中,bash会将bat扩展名标记为可执行文件(这是cygwin对Windows的惯例),因此它会使用其关联解释器(cmd.exe,根据操作系统配置)加载和执行该文件,就像运行你的 #! 脚本一样创建一个新实例的bash(根据posix标准)。


2
对于普通的UNIX shell脚本,它应该加载在shebang之后指定的程序,而不是盲目地使用bash(并且指定bash的脚本可能不太可移植 :))。 - Joey
4
在 .bat 文件中这个方法可行,但在 .ps1 (PowerShell) 文件中不行。Cygwin 必须具有一些内置的 .bat 文件处理功能。 - Bogdan Calmac

1

如果您想像Shell脚本一样分叉执行*.cmd文件,并将其日志附加到一个文件中:

cmd /c test.bat > nohup.out &

享受!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接