7

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

  • 从用户那里读取“行”文本。
  • 识别用户是否按下“tab”键以方便自动完成。
  • 识别用户是否按“向上/向下”键查看历史记录。

在我开始自己动手之前,有没有人知道一个 Java 库可以促进全部或部分的实现?

在 ssh 的命令行中,它可能看起来像这样:

鲍勃> java -jar MyTool.jar

MyTool 已启动。
请输入命令:

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

> server2 加载帐户
完成

> server3 关闭
完成

>退出

4

7 回答 7

6

查看JReadlinejline2

于 2012-09-26T06:34:31.030 回答
5

更新:picocli-shell-jline2picocli-shell-jline3结合了 JLine 2 和 3 与picocli的优势。

Picocli 允许您使用非常少的代码编写带有选项和位置参数的命令(和子命令) ,并且该库将为所有命令生成 JLine 2 和 3 命令完成程序。

它在使用帮助消息中使用 ANSI 颜色和样式,并具有许多其他独特功能,例如可否定选项、可重复嵌套参数组、变量插值等。

在此处输入图像描述

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

于 2017-08-10T10:56:49.463 回答
1

似乎您正在尝试一次提出 3 个不同的问题,但不知道您真正想要的答案是什么。

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

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

  • 将简单的用户输入解析为命令行输入或命令也相当简单,如果这是您正在寻找的内容,您应该查看这个可能的重复项:How to parse command line arguments in Java?

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

于 2012-09-26T06:01:32.287 回答
1

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

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

于 2012-09-26T06:02:40.497 回答
0

我假设您的意思类似于 python 解释器。Java中没有等价物的原因是Java需要编译成字节码才能执行。

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

希望有帮助。

于 2012-09-26T06:00:16.687 回答
0

在这个派对上有点晚了,但我会把CrashCliche添加到组合中。

于 2013-02-05T17:58:29.497 回答
0

Apache Karaf 有一个命令 shell,可以用作库来为其他应用程序构建命令 shell。您创建类来表示命令,并使用注释来指定命令的选项。Karaf 库提供选项卡补全、历史记录和行编辑,以及交互运行或读取文件或命令行参数以作为脚本执行的能力。

我在这里发现了它,并在我自己的项目中使用了它;它工作得很好。我无法将其与其他任何产品进行比较,因为我没有使用过它们。

于 2013-12-05T22:54:35.457 回答