有没有办法让 Windows 脚本 (BAT) 文件在 Unix 机器上运行?例如导入函数或库,它只能在 Unix OS 上识别,但在 Windows 中运行时无效。
或者可以将两组命令写入同一个文件中并执行以下操作:
If OS = 'Windows' then execute between lines A and B
else execute between lines C and D
答案1
您无法在 UNIX/Linux 上本地运行 BAT 脚本。但您可以尝试葡萄酒:
Wine(最初是“Wine Is Not an Emulator”的缩写)是一个兼容层,能够在多个符合 POSIX 的操作系统上运行 Windows 应用程序。
您可以下载适用于多个 Linux 和 BSD 发行版以及 Solaris 的 Wine 安装程序这里(你需要编译来源对于其他 UNIX 版本,则不需要。)
安装并配置 Wine 后,将 BAT 脚本复制到 UNIX/Linux 计算机并像这样运行它(来自http://forum.winehq.org/viewtopic.php?t=8795):
# wine cmd < path/to/your/file.bat
# wine start path/to/your/file.bat
# wine cmd /c path/to/your/file.bat
请注意,尽管 Wine 会尽力执行脚本,但存在可移植性问题,例如文件系统区分大小写、路径名、文本编码问题等,这些问题可能会破坏一切。
这就是为什么我建议你使用 Wine 来处理旧脚本。新脚本最好用独立于平台的语言编写,比如 Perl 或 Python。
答案2
有很多可运行于 Windows、UNIX、Linux 以及其他操作系统的替代脚本语言。
Perl可能是最佳选择。Perl 是一种高级、通用、解释型、动态编程语言。Perl 几乎可以完成您想要的任何与操作系统相关的工作,更不用说综合 Perl 档案网络 (CPAN) 了。CPAN 是一个档案库,其中包含超过 25,000 个用 Perl 编写的软件发行版以及相关文档。几乎您能想到的所有东西都有“插件”。集成到所有主要数据库、流行软件产品等等。
Python、Ruby、Lua 是其他例子。
另一个可能的解决方案是在 Windows 上运行 UNIX/Linux 脚本。这可以通过以下方式实现赛格威. 简而言之,Cygwin 是一个为 Windows 提供 Linux 外观和感觉环境的工具集合。