我正在编写一个shell脚本,以便在不断增长的日志文件中执行“尾部”操作。此脚本接受要搜索的参数,并逐步增加它们的输出。
例如,如果调用脚本如下:
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不适用,我得到未经过滤的日志。
我在这里遗漏了什么吗?或者有更简单的方法吗?
答案 0 :(得分:2)
eval tail -f $LOG_FILE_PATH $full_grep_string
答案 1 :(得分:1)
grep缓冲它找到的行。所以修改你的代码
full_grep_string="$full_grep_string | grep --line-buffered $grep_string"
应该有效。我在debian lenny上测试了它(使用bash)。
并使用an0
的提示eval tail -f ...
(这一切都适用于整个单词)