function simple_report { local generator="$1" local filter="${2:-cat}" { eval "$generator 12>/dev/fd/12 | $filter" report=$(cat<&12) } 12<<EOF EOF wait } 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" echo finish } function report { # Eval breaks output for some reason case $report in simple_report) simple_report "$@" ;; short_report) short_report "$@" ;; standart_report) standart_report "$@" ;; default) echo "Report is not implemented" esac }