将命令调用添加到Unix命令行应用程序
我正在使用Java6编写针对Solaris的命令行应用程序。我希望能够像许多Unix工具所允许的那样使用向上和向下箭头滚动浏览以前的命令的历史记录(shell,VIM命令模式提示符等)。
有没有实现这一目标的标准方法,还是我必须自己动手?
解决方案
回答
是的,使用GNU readline库。
回答
我认为我们正在寻找类似JLine的产品,但我从未使用过它,因此无法证明其质量。
她显然可以处理自动完成和命令行历史记录,而最近的发行版是最近(今年2月),因此它绝不会死。
回答
ledit在Linux上可以胜任此类工作。它可能很容易在solaris上编译。
说明:ledit将调用包装到其他命令行应用程序,甚至可以传递给文件以永久存储历史记录。
这是主页:http://cristal.inria.fr/~ddr/ledit/
回答
有一个SourceForge项目,http://java-readline.sourceforge.net/,它提供与GNU readline的基于JNI的绑定。我玩过它(在实际项目中未使用过),它当然涵盖了所有功能。
回答
警告:GNU readline受GPL许可条款的约束:
Readline is free software, distributed under the terms of the GNU General Public License, version 2. This means that if you want to use Readline in a program that you release or distribute to anyone, the program must be free software and have a GPL-compatible license. If you would like advice on making your license GPL-compatible, contact [email protected].
换句话说,使用Readline可以将GPL风格从库传播到整个程序。 (与LGPL相比,后者允许运行时链接到库,并且仅要求开放源代码才能改进库本身。)
对于我们这个商业世界中的人来说,即使我们不开发商业应用程序,这也是一个停滞点。
无论如何,维基百科页面列出了几种选择,包括JLine,听起来很有希望。
顺便说一句:我在一家设计医疗产品的公司工作。我们从PC软件中扣除零(0)美元。我们几乎所有的软件都在我们设计的嵌入式系统上运行(并且我们不会从该软件的销售/升级中赚钱,仅从产品本身中赚钱);有时我们确实拥有可以在最终用户的PC上运行的软件诊断工具。 (我认为未向客户发布的设计/制造/测试软件可能会使用GPL库,但我不确定)。医疗产品具有相当严格的控制;我们基本上必须向FDA证明它对用户是安全的,这不像最终用户可以决定"哦,我不喜欢这个软件,我只是对其进行调整或者使用公司XYZ的售后市场替代品"-设备制造商要承担巨大的责任。