bash 프로그램은 표준 입력에서 키워드를 볼 때 특정 작업을 수행합니다.

bash 프로그램은 표준 입력에서 키워드를 볼 때 특정 작업을 수행합니다.

외부 컴퓨터에 연결하고 몇 분 동안 표준 출력으로 많은 내용을 인쇄하는 실행 파일이 있다고 가정해 보겠습니다. 이 출력의 끝에는 "STOP"이나 EOF 문자 등과 같은 키워드가 있습니다. 이 키워드/EOF를 인쇄한 후 실행 파일은 계속 실행되지만 더 이상 출력이 전송되지 않습니다. 자체적으로 종료되지는 않습니다.

이제 이 실행 파일의 출력을 다음을 수행하는 bash 스크립트로 파이프하고 싶습니다.

  1. 입력되는 내용을 읽고 이를 모두 표준 출력에 씁니다.
  2. "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 }
  ...
}

관련 정보