포그라운드 프로세스가 문자열을 내보낸 다음 이를 백그라운드로 보낼 때까지 기다립니다.

포그라운드 프로세스가 문자열을 내보낸 다음 이를 백그라운드로 보낼 때까지 기다립니다.

bash스크립트를 사용하여 프로세스를 시작하고 프로세스가 특정 문자열 stdout(예: 'Server Initialized')을 쓸 때까지 기다린 다음 이를 백그라운드로 보내고 스크립트 실행을 계속합니다. 더 좋은 점은 'Server Initialized'한 번 인쇄하면 프로세스 출력이 무시된다는 것입니다( /dev/null?로 리디렉션됨).

해커이기 때문에 이제 10초 동안 기다렸다가 서버가 시작되었다고 가정합니다.

( ./long_running_process ) > /dev/null 2>&1 &
# sleep 10
echo 'I run after long_running_process prints "Server Initialized"

일정 기간 후에도 검색 문자열이 나타나지 않으면 점수를 부여한 후 오류 상태 코드와 함께 종료됩니다.

답변1

아이디어는 백그라운드에서 서버를 실행한 다음 예상 문자열이 나타날 때마다 출력을 grep하는 것입니다 'Something 3'( 'Server Initialized'귀하의 경우).

#!/bin/bash

main()  
{
    output=$(mktemp "${TMPDIR:-/tmp/}$(basename $0).XXX")
    server &> $output &
    server_pid=$!
    echo "Server pid: $server_pid"
    echo "Output: $output"
    echo "Wait:"
    until grep -q -i 'Something 3' $output
    do       
      if ! ps $server_pid > /dev/null 
      then
        echo "The server died" >&2
        exit 1
      fi
      echo -n "."
      sleep 1
    done
    echo 
    echo "Server is running!" 
}

server() 
{       
    i=0
    while true; do
      let i++
      echo "Something $i"  
      sleep 1
    done
}

main "$@"

관련 정보