function simple_report { local generator="$1" local filter="${2:-cat}" # Create fd12 (sending empty output), execute checks (writting extra info on fd12), print main info and store extra info into variable, wait for termination of async checks. # { # chmod +w /dev/fd/12 # eval "$generator 12>/dev/fd/12 | $filter" # report=$(cat<&12) # } 12<$fifo | $filter" & genpid=$! report_text=$(cat "$fifo") wait "$genpid" rm -f "$fifo" } function short_report { local generator="$1" local filter="${2:-print_table | decorate_table}" configure_palete "$palete" simple_report "$generator" "$filter" finish } function standart_report { local generator="$1" local filter="${2:-print_table | decorate_table}" configure_palete "$palete" simple_report "$generator" "$filter" print "$report_text" echo finish } function report { # Eval breaks output for some reason case $report_style in simple_report) simple_report "$@" ;; short_report) short_report "$@" ;; standart_report) standart_report "$@" ;; default) echo "Report is not implemented" esac }