readarray блокирует ввод из процесса

Буферизация мешает.

Используйте 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
1
23.03.2020, 20:25
1 ответ

Подстановка процесса выводит имя файла, а 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
3
28.04.2021, 23:19

Теги

Похожие вопросы