在Cygwin的bash中执行.bat脚本时,它是通过什么机制运行的?我知道如果我运行一个.EXE文件,它会启动,无论这个.EXE文件是来自Cygwin还是传统环境。我也知道当我执行具有#!开头的可执行脚本时,Cygwin会提供必要的支持使其运行。
但是为什么.bat脚本能够工作呢?是Cygwin内部有一个组件知道Windows .bat脚本是什么以及如何处理它吗?还是在Windows下执行调用启动.EXE文件的命令对于.bat脚本也同样适用,不存在不兼容的情况?
在Cygwin的bash中执行.bat脚本时,它是通过什么机制运行的?我知道如果我运行一个.EXE文件,它会启动,无论这个.EXE文件是来自Cygwin还是传统环境。我也知道当我执行具有#!开头的可执行脚本时,Cygwin会提供必要的支持使其运行。
但是为什么.bat脚本能够工作呢?是Cygwin内部有一个组件知道Windows .bat脚本是什么以及如何处理它吗?还是在Windows下执行调用启动.EXE文件的命令对于.bat脚本也同样适用,不存在不兼容的情况?
运行
./test.bat params
在bash中似乎等同于
cmd /c test.bat params
我相信在cygwin中,bash会将bat扩展名标记为可执行文件(这是cygwin对Windows的惯例),因此它会使用其关联解释器(cmd.exe,根据操作系统配置)加载和执行该文件,就像运行你的 #! 脚本一样创建一个新实例的bash(根据posix标准)。
如果您想像Shell脚本一样分叉执行*.cmd文件,并将其日志附加到一个文件中:
cmd /c test.bat > nohup.out &