"오류" 스트림이 감지될 때 TAIL을 사용하여 FOR 루프를 종료하는 방법

"오류" 스트림이 감지될 때 TAIL을 사용하여 FOR 루프를 종료하는 방법

결과를 "results"라는 파일에 전달하는 "for" 루프가 있는데 가끔 오류 스트림이 감지되고 루프가 종료하고 다음 반복을 시작하기 전에 루프 내에서 여러 번 계속 시도합니다. 오류가 처음 발생할 때 잘못된 결과를 감지하고 다음 반복으로 이동하고 싶습니다. 나는 이것을 세 번 시도했지만 성공하지 못했습니다.

편집: - 이전 코드의 맥락에서 이것을 넣습니다.

wl_pass=input.txt
for fn in `cat $wl_pass`; do
wpscan --url $fn -e  u vp vt >> "results" 

1번 시도

if [ "tail -1 -f results" == "Error" ]; 
then
        echo "error detected"
        continue
fi

2번 시도

while [ $("tail -1 -f results" | grep -o0 -c "Error") -eq 0 ]; do continue; done

3번 시도

tail -f "results" | grep --line-buffered "Error" | while read line ; do
      continue
done

어떤 제안이라도 환영합니다


귀하의 의견에 감사드립니다 -->> 이것이 제가 지금까지 가지고 있는 것입니다. 여전히 문제가 있습니다 :-

wl_pass=input.txt

wl_pass="${wl_pass}"

count_pass=$(wc -l $wl_pass | cut -d " " -f1)

while true
do
        timestamp=`date +%s`
        echo start $timestamp >> results
        for fn in `cat $wl_pass`
        do
        wpscan --url $fn -e  u vp vt >> results
        echo end $timestamp >> results

        if sed -n '/start $timestamp/,/end $timestamp/p' results | grep -E 'Error:'; then
                break
#               continue
        fi
        done

done 

답변1

왜 사용하는지 잘 모르겠습니다 tail.

result텍스트 파일을 생성하는 애플리케이션이 있고 그 안에 "error"라는 단어가 있는지 확인해야 한다고 가정해 보겠습니다 .

while true
do
    ./app > result
    if grep Error result ; then
       break
    fi
done

기본 애플리케이션이 연속 로그를 생성하고 특정 이벤트로 인해 "오류"라는 단어가 나타날 수 있으며 로그의 특정 부분을 확인하려는 경우. 이벤트가 존재하는 경우 이벤트 앞에 "오류"라는 단어를 무시하십시오.

./app > result
while true
do
    timestamp=`date +%s`
    echo start $timestamp >> result
    ./trigger_event_in_app
    echo end $timestamp >> result
    
    if sed -n '/start $timestamp/,/end $timestamp/p' result | grep Error ; then
       break
    fi
done

관련 정보