結果を「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