在Linux环境下运行.bat文件

10

有没有办法在Linux环境下运行.bat文件? 我有一些.bat文件,它们的目的是调用mvn install:install-file脚本。因此,脚本中没有任何依赖于操作系统的内容。

谢谢。

8个回答

16
你可以使用 wine 或者 dosbox,但是通常情况下Linux中没有已知的bat解释器。然而,有一些适用于Windows的各种Unix shell实现,甚至还有一个标准工具包Windows Services for UNIX(又名SUA),其中包括ksh实现和许多其他好玩的东西,因此如果您想要操作系统透明度,可以考虑使用它并在符合POSIX标准的shell脚本语言中编写脚本。
--- 编辑 --- 另一方面,如果你的脚本中除了一个mvn <params>之外没有其它内容,你可以确保该文件有可执行权限(x标志),在头部加入一个shell解释器(如/bin/bash script.bat),然后运行它。不过不能保证一定成功。

1
谢谢你的回答。该脚本使用“set”、“rem”、“call”命令。这些命令在Unix环境中无法识别。很遗憾还没有开发出这样的解释器。 - Sqeezer
这里的大坑是Windows批处理文件通常使用CRLF作为行分隔符,而bash在处理这些文件时往往会出现奇怪的问题。使用dos2unix将文件从CRLF转换为CR格式。 - Digital Trauma
1
小修正 - 在Linux上有bat解释器:winescript - ensonic
@ensonic 你说得完全正确,现在有各种不同的翻译工具可供选择,原始答案是十多年前的了 :) - favoretti

4
在Linux终端中输入:
wine cmd

之后,Windows命令提示符将在您的终端上播放。转到.bat文件所在的文件夹,键入.bat文件的名称并按回车键。它将成功运行。


我认为这也可以作为 wine cmd /c <bat_file> 执行,以在执行完成后自动关闭 cmd 窗口。由于我目前不在 Linux 机器上,所以我还没有测试过它。实际上它可能只是完全隐藏了 cmd 窗口。 - AntumDeluge

3
简单地回答是,只要满足以下条件,你就可以在Linux上运行它:
  • .bat文件中运行的命令在你的Linux系统的$PATH路径下。
  • 你没有使用微软特定的BATCH文件命令或控制结构。
你需要将文件设置为可执行文件,并且很可能需要在文件的开头添加一行指示Linux脚本应该用哪个shell来运行脚本。例如,对于bash,可以这样写:#!/bin/bash

这里的一个大问题是Windows批处理文件可能使用CRLF作为行分隔符,而bash往往以奇怪的方式窒息。使用dos2unix将其从CRLF转换为CR格式。 - Digital Trauma

0

安装dosbox

sudo apt install dosbox

运行它 dosbox

从Linux操作系统中挂载您的主文件夹。在dosbox中输入以下命令

MOUNT D /home/<your user>

切换文件夹驱动器

D:

现在,如果您的用户主目录中有一个名为my.bat的文件,则只需在doxbox中运行它 MY.BAT


0

你可以在Linux中使用Notepad++轻松运行任何批处理文件,你可以在任何Linux应用商店中找到Notepad++。我是从适用于Linux的Snap Store下载的。Notepad++有一个名为“运行”的选项,它可以在任何环境下为你运行批处理文件。


0

-1
不行。这些bat文件是Windows shell脚本,可能执行Windows命令并期望在Windows环境中运行。您需要将它们转换为shell脚本才能在Linux上运行,因为您的bash shell无法理解dos命令。幸运的是,如果安装文件脚本确实是跨平台的,那应该很容易。如果您提供一个示例,我们可能能够帮助您进行翻译。

-2

你可以将你的 .bat 脚本编写成一个 shell 脚本的等效形式。


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