2010-06-22 5 views
2

다음과 같은 문제가 발생했습니다. 내 콘솔 유틸리티가 프로세스로 실행 중이어야합니다 (올바른 용어가되기를 바랍니다). 모든 명령이 직접 처리되도록해야합니다. gnuplot과 같이 대화식 쉘 (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는 쉘 명령으로 실행됩니다,하지만 난 irb를 입력 한 후, 그것은 아니다. 당신은 요점을 얻습니다.

irb는 콘솔을 특수 모드로 전환하거나 특정 루프에서 주어진 입력 자체를 구문 분석합니다. C++에서 이와 같은 동작을 생성하는 적절한 방법이 있습니까? 감사합니다

+0

질문을 이해할 수 없습니다. C++ 프로그램에서 콘솔 입력을 캡처하고 싶습니까? 너 왜 irb에 대해서 말하는거야? – neuro

+0

@neuro Irb는 내가 말하는 행동의 예일 뿐이므로 내 질문에 전혀 관련이 없습니다. –

답변

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.을 인쇄 할 수 있습니다.

다른 모든 것들에 대해서는 패턴 일치 또는 구문 분석에 대해 더 배우고 싶을 것입니다. Google은 귀하의 친구입니다 (예 : bison, 좋은 tutorial).

+0

고마워요, 이것은 명백한 해결책입니다. 그러나 동적 인 매개 변수 등으로 좀 더 복잡한 명령을 원했습니다. 어쨌든, 직접 작성해야 할 것 같습니다. –