Bashでログを変数に割り当てる方法

Bashでログを変数に割り当てる方法

ログ出力を「line」に割り当てたいです。以下を試しました。 line=tail -1000 /var/log/syslog

しかし、うまくいきません。

myscriptは次のとおりです

#!/bin/bash

line=`tail -1000 /var/log/syslog`
d1=$(date --date="-10 min" "+%b %_d %H:%M")
d2=$(date "+%b %_d %H:%M")
while read line; do
    [[ $line > $d1 && $line < $d2 || $line =~ $d2 ]] && echo $line
done

ベストアンサー1

この変更を試してください。

fd=""
tmplog="/tmp/temp_${$$}_${RANDOM}"
tail -1000 /var/log/syslog > "$tmplog"

exec {fd}<"$tmplog"

while IFS='' read -r -u $fd line || [[ -n $line ]]; do
    #your commands here
done

exec {fd}>&-
rm "$tmplog"

仕組み:fd変数に割り当てられます。スクリプトPIDと組み込みの「ランダム」番号を使用して一時ファイルを生成します(代わりにmktempコマンドを使用することもできます)。fd一時ファイルを読み取るためにファイル記述子を開きます。 whileループを使用してIFSNoneに設定し、-u読み取りオプションを使用して読み取りコマンドを実行しますfd。同じ変数を使用してループ内にコマンドを配置しますline。ファイル記述子を閉じます。一時ファイルを削除します。

おすすめ記事