我正在开发一个用 Java6 编写的 Solaris 命令行应用程序。我希望能够使用许多 Unix 工具允许的向上和向下箭头(shell、VIM 命令模式提示符等)滚动浏览先前命令的历史记录。
有没有实现这一目标的标准方法,还是我必须自己动手?
我正在开发一个用 Java6 编写的 Solaris 命令行应用程序。我希望能够使用许多 Unix 工具允许的向上和向下箭头(shell、VIM 命令模式提示符等)滚动浏览先前命令的历史记录。
有没有实现这一目标的标准方法,还是我必须自己动手?
是的,使用GNU readline库。
我认为您正在寻找JLine 之类的东西,但我从未使用过它,因此无法证明它的质量。
她显然可以处理自动完成和命令行历史,最后一个版本是最近(今年 2 月)所以它绝不是死的。
ledit 在 linux 上非常适合这类事情。它可能很容易在 solaris 上编译。
澄清:ledit 包装对您的其他命令行应用程序的调用,甚至可以传递一个文件以永久存储您的历史记录。
有一个 SourceForge 项目,http://java-readline.sourceforge.net/,它为 GNU readline 提供了基于 JNI 的绑定。我玩过它(没有在实际项目中使用),它肯定涵盖了所有功能。
警告:GNU readline受 GPL 许可条款的约束:
Readline 是免费软件,根据 GNU 通用公共许可证第 2 版的条款分发。这意味着,如果您想在您发布或分发给任何人的程序中使用 Readline,该程序必须是免费软件并具有 GPL-兼容许可证。如果您想获得有关使您的许可证与 GPL 兼容的建议,请联系licensing@gnu.org。
换句话说,使用 Readline 将 GPL 特性从一个库传播到整个程序。(与 LGPL 相比,它允许运行时链接到库,并且只需要开源来改进库本身。)
对于我们这些商业世界的人来说,即使我们不开发商业应用程序,这也是一个阻碍。
无论如何,维基百科页面列出了几个替代方案,包括 JLine,这听起来很有希望。
顺便说一句:我在一家设计医疗产品的公司工作。我们从 PC 软件中赚取零 (0) 美元。几乎我们所有的软件都在我们设计的嵌入式系统上运行(我们不会从该软件的销售/升级中赚钱,只有产品本身);有时我们确实有可以在最终用户的 PC 上运行的软件诊断工具。(未向客户发布的设计/制造/测试软件我认为可能使用 GPL 库,但我不确定)医疗产品具有相当严格的控制;你基本上必须向 FDA 证明它对用户是安全的,这不像最终用户可以决定“哦,我不喜欢这个软件,我会对其进行调整或使用 XYZ 公司的售后替代品”——那会让设备制造商承担巨大的责任。