Java 中类似 POSIX shell 的实现

5
  1. 有没有实现类似于POSIX shell的语言来编写Java脚本的工具?

  2. 如果没有,是否有ANTLR或JavaCC语法可用(我可能错过了)?

编辑: 我知道可以使用Jython、JRuby、Groovy和JavaScript进行脚本编写,但它们都没有类似bash的语法。

这不是用来编写Java代码的脚本,而是为了让人们运行预定义的命令,这些命令将与大型第三方媒体资产管理系统进行交互。

我想执行以下操作:

ls | grep "something" > output

这只是为了说明,如果ls和grep是Java命令的话。

谢谢


请问您是否找到了一个纯Java的shell解决方案,其中包括一个简单的*nix shell和命令? - mP.
不,我没有找到它。可能它还不存在。但是我接受的解决方案同样有效。好吧,它不太便携,但是实际上并没有真正便携的Java控制台I/O库可以用来创建一个shell。也没有行编辑支持。 - Jaka
7个回答

1
Groovy允许脚本编写,语法与Java相似。

1

我不太确定你在寻找什么 - 类似于 JShell?类似于 Rhino(Java中的JavaScript实现)?还是类似于 Groovy(为JVM生成代码的动态语言)?


1
类似JShell的东西。但是JShell的状态对我来说基本上就像从头开始一样。 - Jaka

1

1
  1. 我知道的所有 POSIX shell 实现都是用 C 写的,但我没有特别研究过这个问题。

  2. POSIX shell(我假设你指的是类似 bash 的语法)语法相当复杂。在词法分析和解析之间没有明显的分离。另一方面,解析几乎不需要回溯。因此,解析器生成器可能帮助不大。

编辑:由于您澄清了您想要 shell 语法:

我认为您最好使用现有的 shell。以下是一些架构考虑:

  • 您可以将应用程序链接到现有的 shell 中。添加内置功能以操作您的资产管理系统。可能会存在许可问题。这样每个 shell 实例就有一个应用程序实例。

  • 您可以使用简单的客户端-服务器架构,其中服务器是应用程序的一部分,仅响应没有控制逻辑的简单命令,而客户端链接到 shell 并且不直接访问应用程序数据。几个 shell(bash、ksh、zsh)已经具备了 TCP 访问的手段。

    您可能不需要重新发明通信协议;考虑使用 HTTP(S),因为服务器和客户端实现都已经准备好了。事实上,您甚至可以只在客户端使用 wget 或 curl 脚本,因此根本不需要修补 shell(这将使客户端保持复杂状态)。

如果您需要修补 shell(例如添加内置功能),请考虑使用 zsh,它具有模块系统。您的应用程序(或客户端部分)将出现为定义内置功能和其他所需内容的模块(例如,zsh 发行版包括用于 ftp 和 mmap 等内容的模块)。


+1 链接 C 实现的想法!否则是的,我指的是 POSIX shell,谢谢。我不会使用现有的脚本,而是使用已经熟悉如何在 bash 中完成任务的人。我会先放一段时间,如果没有人建议 Java 实现,我会接受你的答案。 - Jaka
还有一个可以独立于Cygwin运行的Windows zsh端口。太棒了! - Jaka
@Jaka:有吗?我只知道古董。我看到http://zsh-nt.sourceforge.net/已经被重新启用,但它仍然是一个10年前的版本。或者你找到了其他东西? - Gilles 'SO- stop being evil'
我写评论太快了,只看到“复活”的词并且最新版本发布于2010-02-16。后来我才意识到实际上发布的是什么 :) - Jaka

1
你可以尝试使用Apache Commons CLI库,它有解析POSIX、GNU类命令行参数的实现。

1

0

我知道YACC Bash语法。我看过它,但它让我感到不适。 似乎还没有人制作YACC到ANTLR的转换器。这也可能不容易,因为ANTLR是LL(*)和LALR。 - Jaka

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