Java命令行“shell”具有自动完成功能

时间:2012-09-26 05:48:35

标签: java autocomplete stdin

我需要创建一个Java命令行,它将在服务器上远程调用。它需要:

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

在我离开之前,是否有人知道Java库可能会促进全部或部分内容?

即。从ssh的命令行看起来可能如下:

  

鲍勃> java -jar MyTool.jar

     

MyTool开始。
  请输入命令:

     

> server1启动
  服务器启动...
  服务器已启动

     

> server2加载帐户
  完成

     

> server3 shutdown
  完成

     

>退出

7 个答案:

答案 0 :(得分:5)

结帐JReadlinejline2

答案 1 :(得分:1)

好像你试图同时提出3个不同的问题而不知道你真正想要答案的是什么。

  • 接受用户输入并提供自动完成是微不足道的,我非常怀疑你会找到一个用于此类任务的通用库

  • 解析复杂的类似bash的语句听起来很酷,并且可能存在一个库,但我不认为它会给你很大的空间来创建你自己的一组类似bash的指令。 (特别是考虑到你说它需要比你作为bash脚本所做的任何事情更复杂 - 这是一个很高的命令)

  • 解析简单的用户输入就好像它是命令行输入或命令一样也很简单,如果你正在寻找这个,你应该看看这个可能的副本:How to parse command line arguments in Java? < / p>

我建议重新调整您的问题,使其更具体地说明您正在寻找的内容,并避免强调“自动完成”的简单任务,并简单地接受文本框中的用户输入。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

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

enter image description here

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

答案 4 :(得分:0)

我认为你的意思与python解释器类似。 Java中没有等价的原因是因为Java需要在执行之前编译为字节码。

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

希望有所帮助。

答案 5 :(得分:0)

在这一方上迟到了,但我会添加CrashCliche

答案 6 :(得分:0)

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

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