파일에서 stdin을 가져오지만 여전히 터미널에 표시됩니다.

파일에서 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이 내 OS입니다.

답변1

프로그램에 대한 입력을 버퍼링하는 입력 리디렉션(./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

답변2

이것이 바로 tee사용되는 것입니다.

예를 들어:

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

여기서 일어나는 일은 tee가 stdin을 가져와 stdout에 복사하고 다시 파이프하는 것입니다. 파이프 조인트와 같습니다.

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

관련 정보