Bash에서 특정 출력으로 명령을 반복합니다.

Bash에서 특정 출력으로 명령을 반복합니다.

간단한 bash 스크립트를 작성 중입니다. 어떻게 특정 출력 문자열을 기다린 다음 스크립트를 이동할 수 있습니까? 다음을 시도했지만 작동하지 않습니다

while  [ "$(cat abcd.txt)" != "ocid1.vnic" ]; do cat abcd.txt ;done;

출력에는 start에 위의 문자열이 포함되어 있으며 이는 일반적입니다. 그것은 다음과 같을 수 있습니다

ocid1.vnic-fdhvndivfudsvu
ocid1.vnic.fjufghug
ocid1.vnic=dugjfjg

이 상황에서 누구든지 나를 도울 수 있습니까 :)

답변1

다음으로 시작하는 줄을 찾아 줄 이 나타날 때까지 반복하려면 셸에서 이 작업을 수행하는 대신 다음을 ocid1.vnic사용할 수 있습니다 .grep

while ! grep -qe '^ocid1.vnic' abcd.txt; do
    sleep .1
    printf .
done

조건부 check 의 역방향 종료 상태로 grep, 일치 항목이 발견되면 참값을 반환합니다. sleep파일에서 바쁜 루프를 피하기 위해 추가했으며 , printf무슨 일이 일어나고 있는지 확인할 수 있도록 안전하게 제거할 수 있습니다.

매번 파일 전체를 다시 읽기 때문에 파일을 잘리고 다시 써도 예상되는 줄을 캡처합니다. 귀하의 경우에 이런 일이 발생하는지 확실하지 않지만 파일이 크지 않는 한 새 섹션을 읽는 데 어려움을 겪을 가치가 없을 것입니다. 원하시면 이렇게 tail -f abcd.txt하셔도 됩니다계속하기 전에 Bash 스크립트가 상태 메시지를 기다리도록 합니다..

관련 정보