如何在控制台应用程序中创建命令历史?

时间:2013-08-29 08:34:35

标签: c++ linux console terminal

我想制作交互式控制台应用程序,它允许在循环中输入命令。例如,用户键入“搜索”和程序查找一些数据并将其打印在屏幕上。然后程序等待下一个命令(可以是搜索,退出或其他)。为了方便用户,我希望我的程序支持命令历史记录(如在键盘上按向上和向下箭头时在终端中)。但我无法实现如何做到这一点,因为我不知道如何打印文本,可以通过scanf,std :: getline,std :: cin等进一步阅读。 因此,代码std::cin << "hello";未编译(与'std :: cin&lt;&lt;&lt;“hello”'中的'运算符&lt;&lt;'不匹配)。函数fprintf(stdin, "hello");不打印任何内容,scanf无法读取此打印消息。很明显,std::getline(std::cin, str);scanf("%s", s);以及gets(s)等无法读取printfstd::out输出的文字。所以问题是:如何在控制台上打印文本,该文本也将在stdinstd::cin)中?或者也许有更优雅的方式来组织命令历史记录?

P.S。我还想过按模式按下来打印我需要的文字,但我希望有更好的方法来制作命令历史

P.P.S。我使用Linux和C ++

2 个答案:

答案 0 :(得分:3)

使用完全为此目的制作的readline and history libraries

答案 1 :(得分:1)

如果您不想使用Kerrek SB建议的库,您可能会想到另一个方向:

1)历史中应该有哪些命令? - &GT;所有命令,用户键入。 2)你怎么知道,用户键入了什么? - &GT;你从std :: in得到它 3)你如何处理命令,你从std :: in获得? - &GT;您可以处理它们(例如,当用户键入&#39;搜索&#39;)

时开始搜索

除了步骤3,您还可以存储用户在内部键入的命令(例如,在某种矢量中)。如果现在您的用户想要使用命令历史记录并按下“键盘”键。 (或&#39;按键&#39;)您只需在内部向量中查找相应的命令即可。他按下'进入&#39;然后?只需处理命令,即从内部命令历史中选择的用户。