명령 대체를 통해 ncurses 기반 프로그램을 호출 할 수 있기를 바랍니다. 따라서이 명령의 출력을 명령 줄 인수로 다른 프로그램에 전달할 수 있습니다.명령 대체에 사용될 때 ncurses 프로그램이 올바르게 작동하지 않습니다.
echo $(pwd) # should be the same as just calling pwd alone
나는 (그 코드 아래에 다음) 내 프로그램이 작업을 수행하려고 모드는 입력하지 않습니다 저주, 그리고 : 프로그램이 저주 모드로 전환하지 않는 경우 예를 들어,이 떠들썩한 파티에서 할 쉽습니다 문자열 "test"는 절대로 인쇄되지 않습니다. curses 모드를 입력하는 것이 중요합니다. 이론적으로, 사용자가 어떻게 든 stdout에 마지막으로 인쇄 된 문자열을 조작 할 것이기 때문입니다 (바로 지금 문자열이 정적입니다).
echo $(./a.out) # just prints an empty line
내 프로그램은 저주 모드를 입력 한 후 정상적으로 실행하면, "테스트"가 화면에 출력하고 사용자가 키를 누를는 "이 테스트 아니다"문자열을 반환합니다. 여기
./a.out # normal run
는 잘못된 코드입니다 :
// test.cpp
#include <ncurses.h>
#include <iostream>
using namespace std;
/* get curses up and running */
void init() {
initscr(); // start curses mode, might clear screen
raw(); // disable line buff, and C-z/C-c won't gen sigals; see cbreak()
keypad(stdscr, TRUE); // enable arrow keys and function keys
noecho(); // don't echo chars user types
}
/* shut curses down */
void end() {
endwin(); // end curses mode
}
int main()
{
init();
printw("test");
getch();
end();
cout << "this is not a test" << endl;
return 0;
}
내가이 명령을 사용하여 컴파일 :
g++ test.cpp -lcurses
여러분의 도움에 감사드립니다!
아마 때문이다. 예를 들어, 쉘이 파이프로 출력을 여는 중일 수 있습니다. –
어쨌든 그 주위에 있습니까? –
아마도 'if (isatty (fileno (stdin)) ... else ...'또는 입력 내용이 "tty"기능을 가지고 있는지 (즉, 파일이나 파이프가 아닌지, 본질적으로) -'... '의 두 섹션은 curses를 초기화하고 있거나 초기화하지 않는 것을 나타냅니다. –