我需要一些编码建议。我编写了一个简单的 Java 程序,该程序在我公司的一个内部网站中运行。它是一个命令行程序,用户可以在其中输入
copy file1 to remote1
和 compare file1 to file2 archive diff
等命令。我的同事很喜欢它并且经常使用它。
问题是用户的命令往往很长且重复。他们问我是否可以在程序中实现命令历史记录。这样,他们就可以使用向上箭头或其他东西来滚动、编辑和重新提交以前的命令。无需记住先前会话中输入的命令,只需记住当前会话即可。
我已经考虑过了,我想我可以从头开始想出一个解决方案……但这需要几周的时间来开发。我宁愿实现一个可用的包或模块,如果存在并且不会太麻烦的话。我知道这是一个开放式问题,但有人可以推荐这样的资源吗?
我不明白为什么要花这么长时间来开发。这是一个基本的解决方案:
class CommandSession {
private List<Command> commands = new ArrayList<>();
private ListIterator<Command> scroller;
public void execute(Command command) {
scroller = null;
commands.add(command);
command.execute();
}
public Command scrollUp() {
if (scroller == null) {
scroller = commands.listIterator(commands.size());
}
if (scroller.hasPrevious()) {
return scroller.previous();
}
return null;
}
}
您可以通过各种方式对其进行调整以获得更高级的功能,但总的来说,这是一个非常基本的概念。
我在我的项目中使用了CRaSH。它基本上是一个用户需要连接的 SSH shell(也支持用户名/密码),是的,支持命令中的历史记录。命令是用 Groovy 编写的。
Æsh(另一个可扩展的外壳)Readline