Bashのプロセス置換を使っています.
なお,Zshでは何故か動きません.
(time
のフォーマットの違いの問題では無く2>
で流れない)
# !/bin/bash
action() {
sleep 1
echo 'stdout'
>&2 echo 'stderr'
}
unset stdout stderr realtime
eval "$(
{ time action >&3 2>&4; } \
2> >(realtime=$(awk '$1=="real" {print $2}'); typeset -p realtime) \
3> >(stdout=$(cat); typeset -p stdout) \
4> >(stderr=$(cat); typeset -p stderr)
)"
echo "stdout: $stdout"
echo "stderr: $stderr"
echo "realtime: $realtime"