我遇到了以下问题:我的控制台实用程序应该作为一个进程运行(希望它是正确的术语),所以每个命令都直接进入它。像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 :(得分: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";
}
}
显然,这个小程序会打印提示符(>>
)并理解命令exit
和test
,并在所有其他命令上打印Unknown command.
。
答案 1 :(得分:2)
要解析命令行,可以使用Boost.Program_options。