파일에서 stdin을 가져 오지만 여전히 터미널에 표시됩니다. 해야하는 프로그램이 있습니다. 다음과 같이 상상해보십시오. $

프로그램이 실행될 때 데이터를 입력 해야하는 프로그램이 있습니다. 다음과 같이 상상해보십시오.

$ ./program
Hi there. What's your name? Zambezi
What is your quest? To make a program which runs nicely
What is your favourite color? Red
...

이제 프로그램을 실행할 수있는 많은 테스트 입력이 있습니다. 그들은 모두 다음과 같은 것을 포함합니다 :

Arthur, King of the Britons
To seek the Holy Grail
...

그러나 일부 테스트 스크립트는 실패하지만 불행히도 터미널이 다음과 같이 오류가 발생한 위치를 정확하게 해독하기가 매우 어렵습니다.

$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...

여전히 stdin파일 을 통해 입력을 줄 수 있지만 터미널을 마치 모두 입력 한 것처럼 표시되도록 할 수 있습니까?

중요한 것은 Linux Mint 16입니다.



답변

프로그램에 입력을 버퍼링하는 입력 리디렉션 (./program <arthur.txt)을 사용하는 대신 “예상”과 같은 도구를 사용하여 질문을 기다렸다가 하나씩 답변을 보내야합니다.

#!/usr/bin/expect
log_user 0
spawn ./program
log_user 1

expect {
  "*?"
}
send "Arthur, King of the Britons\r"

expect {
  "*?"
}
send "To seek the Holy Grail\r"

expect {
  "*?"
}
send "...\r"

더 좋은 예 : http://www.pantz.org/software/expect/expect_examples_and_tips.html


답변

이것이 정확히 tee사용되는 것입니다.

예를 들면 다음과 같습니다.

$  echo foo | tee >( grep bar )
foo
$

여기에서 일어나는 일은 티딘이 stdin을 가져 와서 stdout에 복사하여 다시 파이프하는 것입니다. 파이프 조인트처럼.

자세한 내용은 맨 페이지 tee (1)를 확인하십시오.


답변