결과를 "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