【问题标题】:Why does MSYS2 not parse a batch file on Windows?为什么 MSYS2 在 Windows 上不解析批处理文件?
【发布时间】:2015-06-03 03:06:13
【问题描述】:

为了避免重新输入长命令到 MSYS 进行配置,我通常使用批处理文件来存储命令,如下所示: ./configure \ --arch=x86_64 \ --target-os=win64 \ --toolchain=msvc \ --enable-cross-compile \ --enable-gpl \ --disable-debug \ --enable-shared \

这种方式适用于 MSYS。但是当我在 MSYS2 中运行批处理文件时,它发现了许多错误消息,例如:

'.' is not recognized as an internal or external command, operable program or batch file. '--arch' is not recognized as an internal or external command, operable program or batch file. etc...

谁能解释一下是什么原因?

【问题讨论】:

  • 您可能是在 bash shell 中运行批处理文件。您想学习如何编写 shell 脚本而不是批处理文件。
  • @RetiredNinja。你的意思是 MSYS2 是一个 bash shell 而 MSYS 不是?。
  • @MattMcNabb。我应该使用什么行结尾来代替“\”字符?
  • 我的意思是,检查文件上是否没有 Windows 样式的行尾。例如,通过dos2unix 运行它并检查没有空格。
  • @MattMcNabb。我按照你的提示做了,但没有帮助。可能使用bat文件不是处理msys2的正确方法。还是谢谢。

标签: windows msys mingw-w64 msys2


【解决方案1】:

正如您所展示的,您的“批处理”文件看起来更像是一个 Bourne shell 脚本,因此绝对不应将其限定为 .bat 文件。现在,如果您已经将其限定为.bat 文件,MSYS 将无法直接运行它;它需要一个 shebang 行才能使其作为 shell 脚本可执行。从您显示的错误消息来看,MSYS2 似乎正在尝试变得聪明,而 MSYS 没有通过将执行交给 Windows 命令解释器(这些是 cmd.exe 错误消息);由于该脚本采用 Bourne shell 语法,因此您希望 MSYS2 直接在 bash 中运行它。

顺便说一句,MSYS shell bash; AFAIK,MSYS2 还提供bash 作为其主要外壳。

【讨论】:

  • 不,先生,MSYS 可以直接运行 *.bat 文件而不会抱怨,至少对我的文件是这样。但无论如何,我同意 MSYS2 应该与 bash 脚本一起使用。谢谢。
  • @VietHa:那么您的.bat 文件包含的内容比您显示的要多;如果.bat 文件是用它们应该使用的本机cmd.exe 语言编写的,MSYS 不能 直接运行它们。但是,您的不是用那种语言编写的——它是一个 Bourne shell 脚本——所以它不应该带有 .bat 扩展名。此外,要使其在 MSYS 中直接可执行,它必须以 shebang #!/bin/sh 行开头。
猜你喜欢
  • 2012-09-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多