「エラー」ストリームが検出されたときにTAILを使用してFORループを終了する方法

「エラー」ストリームが検出されたときにTAILを使用してFORループを終了する方法

結果を「results」というファイルに渡す「for」ループがあり、時々エラーストリームが検出され、ループが終了し、次の反復を開始する前にループ内で何度も試みます。エラーが最初に発生したときに誤った結果を検出し、次の繰り返しに移動したいと思います。私はこれを3回試しましたが、成功しませんでした。

編集: - 前のコードの文脈でこれを置きます。

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

おすすめ記事