java - 类似于 POSIX shell 的 Java 实现

标签 java bash grammar

  1. 有人知道在 Java 中编写脚本的类似 POSIX shell 语言的实现吗?

  2. 如果这不可用,有人知道我可能错过的某处是否有可用的 ANTLR 或 JavaCC 语法吗?

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

这不会用于一起编写 Java 代码脚本,而是允许人们运行预定义的命令,这些命令将使用大型第三方媒体 Assets 管理系统进行操作。

我想运行这样的东西:

ls | grep "something" > output

其中 ls 和 grep 是 Java 命令。 (这只是为了说明目的)

谢谢

最佳答案

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

  2. POSIX shell(我假设这就是您所说的类似 bash 的意思)语法相当复杂。词法分析和解析之间没有明确的区别。另一方面,解析几乎不需要任何回溯。所以解析器生成器可能帮不上什么忙。

编辑 因为你已经澄清你想要 shell 语法:

我认为最好的办法是使用现有的 shell。以下是一些架构注意事项:

  • 您可以将您的应用程序链接到现有的 shell 中。添加操纵您的 Assets 管理系统的内置插件。可能存在许可问题。这为每个 shell 实例提供了一个应用程序实例。

  • 您可以使用简单的客户端-服务器架构,其中服务器是应用程序的一部分,只响应没有控制逻辑的简单命令,客户端链接到 shell 中,不访问应用程序数据直接地。一些 shell(bash、ksh、zsh)已经具有用于 TCP 访问的方法。

    您可能不需要重新发明一种通信协议(protocol);考虑通过 HTTP(S),它的服务器和客户端实现很容易获得。事实上,您甚至可以在客户端只使用围绕 wget 或 curl 的脚本,因此根本不需要修补 shell(这会使客户端保持复杂的状态)。

    <

如果您需要修补 shell(例如,添加内置函数),请考虑具有模块系统的 zsh。您的应用程序(或客户端部分)将显示为定义内置函数和您需要的任何其他内容的模块(例如 zsh 发行版包括 ftp 和 mmap 等模块)。

关于java - 类似于 POSIX shell 的 Java 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3399075/

相关文章:

Java8 - 在流上过滤后计数

java - Apache Camel 聚合路由异常

bash - 关闭它们后重新打开 STDOUT 和 STDERR?

javascript - 为什么 "throw"是自动分号插入的限制生产?

c++ - 具有不同字符大小的 spirit::qi::grammar-name

java - 我的 Xposed 模块有它自己的上下文吗?

java - JNI 绑定(bind) - undefined symbol : gcj_personality_v0

python - AWK 不适用于由 ^A 分隔的第一行

Bash:每次运行该脚本时都会从脚本中增加一个变量

algorithm - 是否有快速算法来确定上下文无关语言术语的哥德尔数?