53

我正在寻找适用于 windows、Linux、MacOS X 的跨平台脚​​本(语言)。我厌倦了 .bat / bash 。

我想做一些事情,例如,在自动登录时锁定工作站''(我在 X-Window 中有这个,但解决方案非常难看;现在,我希望在 MS Windows 上这样,而不是那么难看:-)) .
通常:自动化任务。

还是使用 Windows Scripting Host 会更好?
PowerShell 也浮现在我的脑海中,但这似乎只适用于我的口味。像 Python、Ruby、(Java?)这样的语言可以与 WSH 交互(优雅吗?明智?)?

DBUS、DCOM 等也作为图片的一部分出现在脑海中。

目前我混合使用 Java、.bat、bash、Ruby、Scala;Excel的一些VBA。有时会变得很丑陋。

我想要一个跨平台的通用解决方案,其中包含/使用接近操作系统特定的 ,,native'' 部分。比如 Ruby 驱动一些特定于 Windows 的东西(只是一个猜测)。
你用什么?
TIA

4

9 回答 9

26

我是Lua的忠实粉丝:

  • 语法有点类似于 Pascal,并且在脚本中运行良好。

  • 极好的功率重量比。精湛的工程。非常好的设计。

  • 非常可移植到具有 ANSI C 编译器的任何平台。

  • 通过 wxLua 和其他绑定支持 GUI

  • 一些支持隐藏常见任务中的操作系统差异,例如 Lua 文件系统插件

  • 核心系统和库非常简单,您可以理解您正在使用的所有内容,但与 bash/bat 相比仍然具有出色的优势。表达能力可与 Python 或 Ruby 相媲美。

  • 您不会对库和框架感到不知所措,这可能是一个加号或减号。

  • 有一本很棒的书:Roberto Ierusalimschy's Programming in Lua;您可以在线免费获得上一版

  • 性能胜过 tcl、perl、python、ruby

  • 为了在 x86 硬件上获得更快的性能,有 LuaJIT。

  • 最后,这就是洞中的王牌:如果您遇到任何特定于平台的问题,编写特定于平台的 C 代码并将其动态加载到 Lua 脚本中是很容易的。Lua 在设计时就考虑到了这个任务,并且做得非常好。您还可以轻松地使用 C 来提高性能(例如,计算 MD5 校验和)。

在过去的 3 到 5 年中,我一直在逐渐将脚本从 bash/ksh/awk/sed/grep/perl 迁移到 Lua。我对结果非常满意。

于 2010-04-15T04:26:13.617 回答
12

你可以试试Batsh

Batsh 是一种简单的编程语言,可编译为 Bash 和 Windows Batch。它使您可以编写在所有平台上运行的脚本,而无需任何额外的依赖。

于 2015-02-18T07:36:33.323 回答
10

Perl 和 Python 几乎在每个平台上都可用

于 2010-04-14T13:29:35.600 回答
7

我认为你在矛盾的边缘玩杂耍:你想要独立于平台(值得称赞)但也“接近操作系统细节”。

但是,如果您更加强调平台独立性,那么我一直在考虑使用 groovy(ruby 的一种对 java 更友好的亲戚)来编写通用脚本。当您需要它时,您可以通过调用 OS shell 命令获得特定于操作系统的行为。

我的动机有点不同:我发现 groovy 代码比 bash 更健壮,尽管我也需要一个好的多平台脚本工具来开发我正在开发的项目。

于 2010-04-14T12:21:25.397 回答
5

您可以在Tcl中编写脚本。

  • 语法简单,更接近您对脚本的期望;

  • 它是跨平台的,可以在所有主要平台上运行;

  • 您可以轻松地在 Tk 中为您的脚本创建简单的 GUI,它也可以在任何地方工作并使用本机控件;

  • 对于特定于 Windows 的函数,您可以使用Twapi(Win32 API 绑定)。

  • 您可以安装一个 Tclkit,它是整个 Tcl 发行版的单个文件。没有冗长的安装过程或隐藏文件或神秘目录;

    • 您可以轻松地将 linux、windows 和 mac 运行时放在一个闪存驱动器上,这样即使本地没有安装解释器,您也可以随时方便地使用解释器。
于 2010-04-14T12:48:46.517 回答
2

比如 Ruby 驱动一些特定于 Windows 的东西

它当然可以,并且在 Windows 上的 Ruby博客上,您可以找到很多示例,在 Pickaxe 书和简陋的书中也有一章。

于 2010-04-14T12:38:57.110 回答
0

我会将 C# 与 Mono 一起使用。

于 2010-04-14T12:19:53.647 回答
0

在 shell 中有 UNIX 和类似 UNIX 的平台的可能性,但我不认为你所要求的在任何脚本语言中都是可能的,因为 Windows。

对于 UNIX 系统,您可以使用:

#!/bin/sh

TYPE=`uname`;
echo 'this is ' ${TYPE};

if [ ${TYPE} = HP-UX ]
   then bdf /var;
elif [ ${TYPE} = Linux ]
   then df -h /var;
elif [ ${TYPE} = FreeBSD ]
   then df -k /var;
else echo "Unsupported OS - ${TYPE}"
fi

我希望它会帮助你!

来源

于 2014-08-25T10:40:16.243 回答
0

不确定您是否仍然需要它,但如果需要,请尝试 ant ( http://ant.apache.org/ )。它是一种跨平台的“脚本语言”。基本上,ant 文件是由 JVM 程序解释的 xml 文件。

于 2014-10-18T15:43:04.237 回答