C++ 如何编写命令行shell来捕获';向上';获取历史输入的关键点?

C++ 如何编写命令行shell来捕获';向上';获取历史输入的关键点?,c++,c,shell,command-line,C++,C,Shell,Command Line,我想为后台程序编写一个命令行shell,在这个shell中我可以键入一些命令。我想添加一个类似bash(或其他类似shell的)的特性--“UP”键来获取历史输入。我如何捕捉按下“向上”键的情况 如果我只使用std::getline(std::cin,line)我无法使用'UP'键或其他功能键,即Ctrl+w来删除输入行中的一个字。使用kbhit()来获取键盘箭头键使用ncurses库,请参阅: #包括 #包括 int main() { int-ch; initscr();//初始化ncurse

我想为后台程序编写一个命令行shell,在这个shell中我可以键入一些命令。我想添加一个类似bash(或其他类似shell的)的特性--“UP”键来获取历史输入。我如何捕捉按下“向上”键的情况

如果我只使用
std::getline(std::cin,line)
我无法使用'UP'键或其他功能键,即Ctrl+w来删除输入行中的一个字。

使用
kbhit()
来获取键盘箭头键使用ncurses库,请参阅:

#包括
#包括
int main()
{
int-ch;
initscr();//初始化ncurses数据结构
键盘(stdscr,TRUE);//启用特殊键捕获
ch=getch();
如果(ch==键向上)

std::cout有一个
readline
函数,支持历史记录和行编辑等

在基本模式下,它可以读取行等。如果您想添加钩子,可以在按下
tab
或类似按钮时使其展开命令

这就是Linux中典型的shell所使用的

此处的文档:

这里举一个例子:

项目主页:

有一个“getline库”,这是一组C功能,允许您编辑/记录程序输入的历史记录等。或者,您必须阅读原始输入并自己处理键盘输入…有一个今天,可能会感兴趣。@MatsPeterson您的建议非常有用,应该是一个答案,而不是命令。我使用GNU readline库。它适用于所有编译器吗?
#include<ncurses.h>
#include<iostream>

int main()
{
    int ch;
    initscr();  //initialize the ncurses data structures

    keypad(stdscr,TRUE); //enable special keys capturing

    ch=getch();

    if(ch==KEY_UP)
        std::cout << "Key up pressed!" << std::endl;
}