4

我正在编写一个 shell 脚本来对不断增长的日志文件进行“尾部”处理。此脚本接受要搜索的参数,并在其上逐步 greps 输出。

例如,如果按如下方式调用脚本:

logs.sh string1 string2

它应该转化为:

tail -f logs.txt | grep string1 | grep string2

我正在构建这样的 grep 字符串列表:

full_grep_string=""
for grep_string in $*
do
    full_grep_string="$full_grep_string | grep $grep_string" 
done

字符串是正确构建的,但是当我尝试最终将它标记到 tail 命令时,就像这样......

tail -f $LOG_FILE_PATH $full_grep_string

... grep 不适用,我得到未过滤的日志。

我在这里错过了什么吗?或者有没有更简单的方法来做到这一点?

4

2 回答 2

2
eval tail -f $LOG_FILE_PATH $full_grep_string
于 2009-07-08T09:50:20.943 回答
1

grep 缓冲它找到的行。所以修改你的代码

full_grep_string="$full_grep_string | grep --line-buffered $grep_string" 

应该工作。我在 debian lenny(使用 bash)上对其进行了测试。

并使用an0的尖端

eval tail -f ...

(所有这些都适用于整个单词)

于 2009-07-08T10:01:56.693 回答