如何使用 TAIL 检测到“错误”流时退出 FOR 循环

如何使用 TAIL 检测到“错误”流时退出 FOR 循环

我有一个“for”循环,它将结果传递到一个名为“results”的文件,偶尔会检测到错误流,并且循环在退出并进入下一次迭代之前继续在循环内尝试多次。我想在错误第一次发生时检测到错误结果并进入下一次迭代。我曾三次尝试这样做,但都没有成功。

编辑:- 将其放在前面的代码的上下文中;

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,并且您需要检查其中是否有“错误”一词:

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

如果您的主应用程序正在生成连续的日志,并且由于某些事件可能会出现“错误”一词,并且您想要检查日志的特定部分。并忽略事件之前的单词“Error”(如果它存在),您可以执行以下操作:

./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

相关内容