代码之家  ›  专栏  ›  技术社区  ›  Jaka

爪哇中的POSIX类shell实现

  •  5
  • Jaka  · 技术社区  · 14 年前
    1. 有人知道用POSIX shell语言实现Java中的脚本吗?

    2. 如果这不可用,有人知道在我可能错过的地方是否有可用的antlr或javacc语法吗?

    编辑: 我知道我有jython、jruby、groovy和javascript可用于脚本编写,但它们都没有类似bash的语法。

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

    我想运行以下内容:

    ls | grep "something" > output
    

    其中LS和GRIP将是Java命令。(这只是为了说明目的)

    谢谢

    7 回复  |  直到 8 年前
        1
  •  1
  •   Gilles 'SO- stop being evil'    14 年前
    1. 我所知道的所有posix shell实现都是用C语言编写的,但我没有特别研究过这个问题。

    2. posix shell(我假设这就是您所说的bash-like)语法相当复杂。词法分析和解析之间没有明确的分离。另一方面,解析几乎不需要任何回溯。所以解析器生成器可能不会有太多帮助。

    编辑 既然您已经澄清了您想要shell语法:

    我认为你最好的选择是使用现有的外壳。以下是一些架构方面的考虑:

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

    • 您可以使用一个简单的客户机-服务器体系结构,其中服务器是应用程序的一部分,只响应简单的命令而不使用控制逻辑,并且客户机链接到shell,并且不直接访问应用程序数据。一些shell(bash、ksh、zsh)已经有了TCP访问的方法。

      您可能不需要重新设计一个通信协议;考虑检查HTTP,对于它,服务器和客户机实现是随时可用的。实际上,您甚至可能不需要在客户机端只有wget或curl脚本,因此根本不需要修补shell(这将使客户机端保持复杂状态)。

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

        2
  •  1
  •   BZ.    14 年前

    Groovy允许脚本-语法接近Java

        3
  •  1
  •   chryss    14 年前

    我不太确定你在找什么,比如 JShell ?类似的东西 Rhino (爪哇中的JavaScript实现)?类似的东西 Groovy (为JVM生成代码的动态语言)?

        4
  •  1
  •   crowne    14 年前

    你可以尝尝这个绝妙的外壳 http://groovy.codehaus.org/Groovy+Shell

    或贝壳 http://www.beanshell.org/

    这两种语言都是JVM中运行的动态语言,并且在调用任何现有Java类的同时都具有接近Java的语法。

        5
  •  1
  •   Rahul    14 年前

    您可以尝试使用ApacheCommonsCLI库,该库具有解析POSIX、类似GNU的命令行参数的实现。

        6
  •  1
  •   Luke Quinane George    8 年前

    crashub bash

    这里有一个纯Java BASH解释器实现:

    它目前没有实现一个完整的基于bash的shell,但是对于语法分析这部分问题来说,它可能是一个很好的开始。

        7
  •  0
  •   Denis Tulskiy    14 年前

    查看此数据集: http://www.antlr.org/pipermail/antlr-interest/2006-May/016235.html

    我想你不需要完整的语法。定义一种语言的子集,做一点实验。也许你甚至不需要antlr,你可以手工编写一个解析器。或者使用scala,你可以把它转换成任何你需要的语言。