【问题标题】:Adding command recall to a Unix command line application向 Unix 命令行应用程序添加命令调用
【发布时间】:2010-09-08 02:58:10
【问题描述】:

我正在开发一个用 Java6 编写的 Solaris 命令行应用程序。我希望能够像许多 Unix 工具允许的那样(shell、VIM 命令模式提示符等)使用向上和向下箭头滚动查看先前命令的历史记录。

是否有任何标准方法可以实现这一点,还是我必须自己动手?

【问题讨论】:

    标签: java unix command-line command-prompt ledit


    【解决方案1】:

    是的,使用 GNU readline 库。

    【讨论】:

    • 除非答案是“坏”,否则我不会投反对票,但考虑到 GPL 因素,我很惊讶这是被接受的答案。
    • @Jason:什么 GPL 因素?您不必将readline 与您的代码一起分发。您可以假设客户端在其系统中拥有它,或者提供有关如何安装它的说明。这类似于 Audacity 使用 ffmpeg 的方式。他们没有分发它的许可证,但他们会告诉你如何获得它,并且他们会在他们的软件中使用它。
    • 来自他们的网页 (tiswww.case.edu/php/chet/readline/rltop.html):“Readline 是免费软件,根据 GNU 通用公共许可证第 3 版的条款分发。这意味着如果您想在一个程序中使用 Readline如果您发布或分发给任何人,该程序必须是免费软件并具有与 GPL 兼容的许可证。”因此它将 GPL 特性从一个库传播到整个程序。与 LGPL 相比,LGPL 允许运行时链接到库,并且只需要开源来改进库本身。
    • 您下载的任何软件都将获得某种许可,如果您选择使用该软件,建议您遵守该许可。事实上,GNU Readline 非常有能力并且被广泛使用。更令人惊讶的是,鉴于 GNU Readline 是一个 C 库,这是公认的答案。当我最初发布时,我显然没有注意到 Java 要求。
    【解决方案2】:

    我认为您正在寻找类似 @​​987654321@ 的东西,但我从未使用过它,因此无法证明它的质量。

    她显然可以处理自动补全和命令行历史记录,最后一个版本是最近(今年 2 月),所以它绝不会死。

    【讨论】:

      【解决方案3】:

      ledit 在 linux 上非常适合这类事情。它可能很容易在 solaris 上编译。

      澄清:ledit 包装了对您的其他命令行应用程序的调用,甚至可以传递一个文件以永久存储您的历史记录。

      这是主页:http://cristal.inria.fr/~ddr/ledit/

      【讨论】:

        【解决方案4】:

        有一个 SourceForge 项目,http://java-readline.sourceforge.net/,它为 GNU readline 提供基于 JNI 的绑定。我玩过它(没有在实际项目中使用),它肯定涵盖了所有功能。

        【讨论】:

          【解决方案5】:

          警告: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 公司的售后替代品”——那将让设备制造商承担巨大的责任。

          【讨论】:

          • (不是我的反对票)但我猜这是不必要的贬义“中毒”。
          猜你喜欢
          • 2013-07-09
          • 2011-11-05
          • 2014-06-17
          • 2014-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多