我有一个“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