2012-09-26 45 views
5

我需要创建一个Java命令行,以便在服务器上远程调用该命令行。它将需要:具有自动完成功能的Java命令行“shell”

  • 阅读用户文本的“行”。
  • 识别用户是否按下“tab”键以方便自动完成。
  • 识别用户是否按下历史记录的“上/下”键。

在我离开并推出自己的产品之前,是否有人知道可能有助于全部或部分此功能的Java库?

在SSH命令行可能是这样的:

鲍勃> Java的罐子MyTool.jar

MyTool开始。
请输入命令:

> server1的启动
服务器开始...
服务器启动

>服务器2负荷占
完成

> server(服务器)关闭
完成

>退出

+0

为了帮助您的谷歌搜索,您正在寻找的关键字是“readline”,这是为Bash命令行提供动力的C库,等等。我在下面的答案中找到了几个类似Java readline的库。你可能会找到一些更适合你的需求的其他人。 –

回答

5

结账JReadlinejline2

+0

'Jreadline'非常有希望,'jline2'似乎需要一些JNI附件 – Jacob

+0

似乎Jreadline不再存在,或者托管在其他地方。任何想法 ? – Benoit

0

我假设你的意思是类似于python解释器。 Java中没有相同的原因是因为Java在执行之前需要编译为字节码。

如果您正在寻找具有良好自动完成功能的东西。我会推荐eclipse或netbeans。他们还会自动编译您的应用程序,让您在完成编写代码后快速运行代码。

希望有所帮助。

+0

不完全是我问的。编辑的问题清晰。 – Jacob

+0

哦,我明白了。恐怕我没有听说过那样的事,对不起。 –

+0

顺便说一句,编译Java的事实并不能排除有类似python的shell。 Scala被编译并运行在JVM上,其REPL(read-eval-print-loop)工作得很好。事实上,我有时使用Scala的REPL来交互式访问Java。 – jbyler

1

看起来好像你想一次询问3个不同的问题,不知道你真正想要的答案。

  • 接受用户输入并提供自动完成是微不足道,我很怀疑你会发现一个通用的库这样的任务

  • 解析复杂的bash类似的声明听起来象是很酷的和图书馆可能存在这样做,但我认为它不会给你很多空间来创建你自己的bash式指令。(尤其是考虑到你说它需要比任何你可以做bash脚本更复杂 - 这是一个很高的订单)

  • 解析简单的用户输入,就好像它是一个命令行输入或命令也是显然的,如果这是你在找什么,你应该看看这可能重复:How to parse command line arguments in Java?

我建议重组你的问题是你在寻找什么更具体,避免把重点放在“自动完成”的简单任务,并简单地接受用户在文本框中的输入。

+0

对不起,有点不清楚。第二点是我的意思。 – Jacob

1

你看过BeanShell吗?它不像shell本身(比如bash或csh),但它可以让你像解释器一样键入java命令,你可以使用tab来自动完成。

我只使用了1.X版本的bean shell,但它们总是为你打开一个窗口,所以它不是你可以在现有的shell中运行的东西。

+0

听起来很酷。听起来比支持读取用户输入文本行的API复杂得多,但仍值得一看! – Jacob

0

这场比赛晚了点,但我会加上CrashCliche混合。

0

Apache Karaf有一个命令外壳,可以用作库来为其他应用程序构建命令外壳。您可以创建用于表示命令的类,并使用注释为命令指定选项。 Karaf库提供了制表符完成,历史和行编辑,以及交互式运行或读入文件或命令行参数以作为脚本执行的能力。

我找到了它here并已在我自己的项目中使用它;它工作得很好。我无法将它与其他任何人作比较,因为我没有使用它们。

0

picocli Java命令行解析库最近添加了自动完成功能。它的主要用例是创建命令行工具,但我已经看到它使用嵌入在类似shell的应用程序中。重要的不是如何从System.in中读取,而是从用户输入中解析子命令,选项和参数。

您可能还喜欢它如何使您可以在使用帮助消息中使用ANSI颜色和样式。您可能能够在您的shell应用程序中利用它。

enter image description here

免责声明:我是作者,因此偏颇。