Буферизация мешает.
Используйте while read line
из оболочки, которая должна читать строку -за строкой -и избежать большинства проблем с буферизацией:
tail -f /var/log/httpd/modsec_audit.log | while read line; do
echo "$line" | sed 's/[^\/]*/\./;s/].*$//g' | awk '{print $0}' | xargs cat
done
Хотя вы, вероятно, можете сделать лучше, используя оболочку (bash ), чтобы также сопоставить имя файла из строки журнала:
tail -f /var/log/httpd/modsec_audit.log | while read line; do
line=${line/*([^\/])/.}
line=${line%]*}
[[ -n "${line}" ]] && cat "${line}"
done
Подстановка процесса выводит имя файла, а readarray не читает из файлов. Вы должны перенаправить файл в него, например:
readarray -t ARR < <(printf "line 1\nline 2\nline 3\n"); echo "${ARR[1]}"
$ echo <(echo hello)
/dev/fd/63
$ cat <(echo hello)
hello