自定义交互式shell

时间:2010-06-22 08:07:59

标签: c++ shell

我遇到了以下问题:我的控制台实用程序应该作为一个进程运行(希望它是正确的术语),所以每个命令都直接进入它。像gnuplot,交互式shell(irb等)。

这显示了我在说什么:

Mikulas-Dites-Mac-2:Web rullaf$ command
Mikulas-Dites-Mac-2:Web rullaf$ irb
>> command
NameError: undefined local variable or method `command' for main:Object
    from (irb):1
>> exit
Mikulas-Dites-Mac-2:Web rullaf$

第一个command作为shell命令执行,但是在我输入irb之后,它不是。你明白了。

irb将控制台置于某种特殊模式,或者它只是在某个循环中解析给定的输入本身? 这是在c ++中创建这种行为的任何正确方法吗?感谢

2 个答案:

答案 0 :(得分:2)

您必须自己解析输入。根据输入的复杂性,这可以通过一些简单的字符串匹配来完成。一个非常简单的例子:

#include <iostream>
#include <string>

int main()
{
  std::string input;
  for(;;)
  {
    std::cout << ">>";
    std::cin >> input;
    if(input=="exit")
      return 0;
    else if(input=="test")
      std::cout << "Test!\n";
    else
      std::cout << "Unknown command.\n";
  }
}

显然,这个小程序会打印提示符(>>)并理解命令exittest,并在所有其他命令上打印Unknown command.

对于其他所有内容,您可能希望了解有关模式匹配或解析的更多信息;谷歌是你的朋友(比如bison和好tutorial)。

答案 1 :(得分:2)

要解析命令行,可以使用Boost.Program_options