2010-06-22 77 views
2

我遇到了以下问题:我的控制台实用程序应该作为一个进程运行(希望它是正确的术语),因此每个命令都可以直接运行。像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 + +?谢谢

+0

我不明白你的问题。你想在C++程序中捕获控制台输入?你为什么在谈论irb? – neuro 2010-06-22 09:09:05

+0

@neuro Irb只是我说的行为的一个例子,与我的问题根本没有任何关系。 – 2010-06-22 09:38:27

回答

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)。

+0

谢谢,这是一个明显的解决方案,但我确实想要一些更复杂的命令 - 具有动态数量的参数等。无论如何,我猜我必须自己写。 – 2010-06-22 09:39:47