一時ファイルなしでこれを行う方法はまだわかりませんが、これは機能grep
フィルター処理less +F
(一時ファイルをクリーンアップする)を示すスクリプトです。私はそれを呼びますlessf
。
重要な要素の1つは、出力がパイプラインを流れ続けることを許可するための--line-buffered
引数です(によって提供されるコマンドは、任意のプログラムに同様の機能を提供します)。grep
tail
unbuffer
expect
#!/bin/sh
LOGFILE=$1
shift
PATTERN=$@
TEMP_DIR=/tmp/lesstmp
TEMP_FILE="$TEMP_DIR/$(basename $LOGFILE)"
[ ! -d $TEMP_DIR ] && mkdir $TEMP_DIR
trap 'rm -rf "$TEMP_DIR"; exit' INT TERM EXIT
( tail -f "$LOGFILE" | grep --line-buffered $PATTERN ) > "$TEMP_FILE" | less +F "$TEMP_FILE"
trap - INT TERM EXIT
使用例:
lessf /var/log/system.log foobar
lessf /var/log/system.log -v nobar