C命令行界面 - 历史记录功能,如BASH

时间:2012-04-27 19:08:25

标签: c linux bash shell command-line

美好的一天,

我正在编写一个简单的CLI(命令行界面)应用程序,它提供一个简单的提示,可以接受来自用户的字符串,验证它们,并根据输入执行某些操作。相当简单。

我正在寻找一个独立于平台的NON-GPL / LGPL手段(或者至少适用于兼容POSIX的操作系统,如Linux,BSD等),所以我可以使用上/下箭头键滚动在我的CLI应用程序中,在以前键入的命令的历史记录中来回传递,并将它们显示在输入行中。

目标是有效地模仿BASH和大多数其他炮弹中的历史特征。我想只使用向上/向下键并检测它们。我假设我需要为此使用中断或一些专门的库;我真的很想用标准ANSI C来做这件事,并且必须完全避免使用任何第三方库。

4 个答案:

答案 0 :(得分:7)

如果你坚持自己做,那么除了"你自己做的事情之外我们说的不多;"它不是非常复杂,但它也不是早上的工作。

您应该非常认真地考虑使用GNU readline,这是其他人(包括bash)使用的内容。它完成了所有这些以及更多并且做得很好。

答案 1 :(得分:4)

您可以使用bash使用的readline库。请注意,这是GPL,因此您的代码必须是内部代码或GPL代码。 libedit是BSD许可的功能较少的

答案 2 :(得分:4)

你可以使用readline,或者你可以采取简单的方法,绝对不做任何事情。当您运行程序时,通过rlwrap调用它,您可以免费获得历史编辑。换句话说,而不是:

$ mytool

你刚跑完

$ rlwrap mytool

rlwrap是readline的包装器,它允许您在不做任何工作的情况下获得readline的好处。

答案 3 :(得分:1)

正如其他答案所述,你真的应该使用readline。否则,您将不得不使用缓冲区,并将stdin文件描述符与read()一起使用。您将需要设置包含历史记录的数据结构和/或文件。此外,您可以使用execvp()和/或system()来发送命令。