直接调用时,在 Cygwin(bash 或 zsh)中运行 .bat 文件是可行的。
但是,如果我位于不同的文件夹并依靠 PATH 变量调用 .bat 文件,它会说command not found
。
如果我在环境 PATH 中有一个 .bat 文件,我该如何让 Cygwin 从任何目录执行它?这适用于 .exe 文件,但显然不适用于 .bat 文件。
答案1
听起来你需要更具体一点。做适用于BAT文件和EXE 文件。可能发生的情况是,您恰好使用了路径中较早的某个文件已占用的名称。
如果有 PATH=C:\1;C:\2;C:\3
然后你创建一个 C:\3\foo.BAT
但是已经有一个 C:\1\foo.EXE
然后当您输入“foo”时,它会先找到 c:\1\foo.exe,然后再找到 c:\3\foo.bat。
这个问题时常困扰着我。
我发现“which”命令在这些情况下很有帮助。
答案2
Cygwin 能够执行.exe
并.bat
Cygwin 的可执行属性或者魔法饼干(MZ
for.exe
和:\n
for .bat
)在文件中。
注意属性x
:
# printf '@echo OK' >bad.bat
# printf ':\n@echo OK' >good.bat
# ls -l *.bat
-rw-r--r-- bad.bat
-rwxr-xr-x good.bat
现在good.bat
可以执行(根据 Cygwin)甚至可以通过 Bash 中的 TAB 完成。
如果您的挂载点支持,acl
您可以将任何文件标记为可执行文件:
chmod a+x my.bat