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

ski*_*ppy 19 windows cygwin batch-file

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

但为什么.bat脚本有效呢?Cygwin中是否有一些组件知道Windows .bat脚本是什么以及如何处理它?或者是在Windows下某种程度上不可能执行调用来启动.EXE文件,该文件不会自动也适用于.bat脚本?

小智 13

运行

./test.bat params
Run Code Online (Sandbox Code Playgroud)

来自bash似乎相当于

cmd /c test.bat params
Run Code Online (Sandbox Code Playgroud)


BnW*_*and 12

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

  • 这适用于.bat但不适用于.ps1(PowerShell).Cygwin必须有一些内置的.bat文件处理. (4认同)
  • 对于普通的UNIX shell脚本,它应该加载在shebang之后指定的程序,而不是盲目使用bash(而指定bash的脚本可能不是很可移植:)) (2认同)