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