외부 컴퓨터에 연결하고 몇 분 동안 표준 출력으로 많은 내용을 인쇄하는 실행 파일이 있다고 가정해 보겠습니다. 이 출력의 끝에는 "STOP"이나 EOF 문자 등과 같은 키워드가 있습니다. 이 키워드/EOF를 인쇄한 후 실행 파일은 계속 실행되지만 더 이상 출력이 전송되지 않습니다. 자체적으로 종료되지는 않습니다.
이제 이 실행 파일의 출력을 다음을 수행하는 bash 스크립트로 파이프하고 싶습니다.
- 입력되는 내용을 읽고 이를 모두 표준 출력에 씁니다.
- "STOP"이라는 단어(또는 EOF 문자도 가능)가 나타나면 실행 파일을 종료하십시오.
pkill을 사용하여 실행 파일을 종료할 수 있습니다. 아마도 tee와 grep의 조합을 사용할 수 있을 것입니다. 그러나 일단 grep에서 일치 항목을 얻으면 어떻게 해야 할지 모르겠습니다.
답변1
스크립트 자체에는 리디렉션 트릭이 필요합니다.
#!/bin/bash
exec 1> >(tee >(awk '/STOP/{system("kill '"$$"'")}'))
while read line; do
echo $line
sleep 1
done
그때부터:
bash-4.1$ (echo can; echo t; echo STOP; echo believing) | bash datscript
또 다른 옵션은 expect
다음과 같습니다.
#!/usr/bin/env expect
spawn thatconnectingexecutablething
set timeout 7
expect {
-ex "STOP" { exit 1 }
eof { exit 1 }
timeout { exit 1 }
...
}