ログ出力を「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ループを使用してIFS
Noneに設定し、-u
読み取りオプションを使用して読み取りコマンドを実行しますfd
。同じ変数を使用してループ内にコマンドを配置しますline
。ファイル記述子を閉じます。一時ファイルを削除します。