2013-10-25 6 views
1

쉘에서 입력을 받아 결과를 출력하는 프로그램을 작성했습니다. 그러나 파이프 라인을 사용하면 입력이 에코되지 않습니다.파이프 라인으로 반향되지 않는 입력

$ ./a.out 
$ /home/Wisatbff/file  # input a pathname (echoed) 

사용 파이프 라인 : 제대로

$ ./a.out | more 
$       # input (same as above, not echoed) 

모두 출력. 파이프 라인을 사용할 때 입력이 왜 울리지 않을까요?

명령 more은 터미널 구성을 변경한다 :

+0

'stdout'과 'stderr'의 차이점이 있습니까? 귀하의 코드에는 무엇이 있습니까? –

+0

"more"의 별명이 있습니까? 만약 당신이 more = less를 alias하면,'export LESS = -X'를 쓸 수도 있습니다. –

+0

@glennjackman 번호'more is/bin/more' –

답변

1

편집 (이전의 대답은 잘못, 내가 질문을 잘못 이해).

당신이 당신의 ./a.out | more을 시작하는 청각 장애를 찾아 다른 청각 장애에서이 명령 (또는 다른 therminal) 실행

stty -F /dev/yourTTY echo

을 그리고 당신은 당신의 콘솔에서 다시 에코해야합니다

아마도 의사 터미널을 사용하고 있지만 stty 명령도 잘 작동해야합니다. 예를를 들어

:이 명령 ./a.out | more

  • 를 열고 새 터미널 및 실행 : stty -F /dev/resultFromFirstStep echo
  • 가 다시 메아리가 확인 당신의 명령을 실행 ps ax | grep $$ | awk '{ print $2 }'
  • :

    1. 현재 터미널을 찾기 귀하의 첫 번째 터미널에.

    편집 : 누군가가 관심이 있다면

    그런데

    , 당신은 morecode source 읽기 터미널을 변경하는 방법을 볼 수 있습니다 : 그것은 ECHO 및 ICANON을 멀리 복용

    void set_tty() { 
        otty.c_lflag &= ~(ICANON|ECHO); 
        otty.c_cc[VMIN] = 1; /* read at least 1 char */ 
        otty.c_cc[VTIME] = 0; /* no timeout */ 
        stty(fileno(stderr), &otty); 
    } 
    

    .

  • +0

    그러나 입력이 에코되지 않는 이유는 무엇입니까? –

    +0

    'more' 명령이 tty 설정을 변경하고 있습니다. 'stty -a -F/dev/YOURTTY' 또는 현재 터미널에 대한'stty -a'와 같이 stty 명령으로 현재 tty 설정을 볼 수 있습니다. 에코를 다시 재생하는 방법에 대한 자세한 내용은 내 편집을 참조하십시오. – Gooseman

    +0

    굉장합니다. 나는'more'가 터미널 conf를 변경하기 전에 입력을 기다릴 것이라고 생각했습니다. –

    관련 문제