4

増大するログ ファイルに対して「テール」を実行するシェル スクリプトを作成しています。このスクリプトは、検索するパラメーターを受け入れ、それらの出力を段階的に grep します。

たとえば、スクリプトが次のように呼び出されるとします。

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" 

動作します。私はそれをdebianlenny(bashを使用)でテストしました。

そして、an0の先端を使用してください

eval tail -f ...

(これはすべて単語全体で機能します)

于 2009-07-08T10:01:56.693 に答える