0

大量のログファイルを(リアルタイムで)「テール」するために、ミニシェルスクリプトを使用しています。

#!/bin/sh

oldGLOBIGNORE=$GLOBIGNORE

export GLOBIGNORE='foo-bar.log'

sudo -E tail -f -n0 /var/log/*.log

GLOBIGNORE=$oldGLOBIGNORE

ご覧のとおり、という名前のファイルを除くすべてのファイルをログに記録したいと思いますfoo-bar.log

-Esudoのオプションを使用すると、GLOBIGNORE変数を保持できるはずですが、機能しないようです。

Ubuntu 10.04、bash4.1.5でテストしています。

どんな手掛かり ?

4

1 に答える 1

3

まずGLOBIGNORE、最後の部分だけでなく、filename-expansionから生じる完全なファイルパスに関連します。だからあなたは実際に書きたいのですGLOBIGNORE='/var/log/foo-bar.log'

次に、を呼び出す前にBashによって展開されるため、実際GLOBIGNOREに環境にエクスポートして追加する必要はありません。-E/var/log/*.logsudo

第3に、古い値を保存しGLOBIGNOREて後で復元する方法は理想的ではありGLOBIGNOREません。これは、設定されていない場合の動作が、設定されているが空の場合の動作とは異なり、スクリプトが設定されていない状態に復元できないためです。幸い、スクリプトはそれを復元する必要がないので(スクリプトが戻った後もスクリプトの変数が引き続き有効であるとは限らないため)、そのようなものを削除するだけで済みます。

とにかく、あなたは書くことができます:

#!/bin/sh

GLOBIGNORE=/var/log/foo-bar.log
sudo tail -f -n0 /var/log/*.log
于 2012-11-08T16:57:46.750 に答える