1
0
mirror of https://github.com/sstephenson/bats.git synced 2024-11-17 11:42:33 +01:00

Add run variant with stdout and stderr separated

The code for storing stdout and stderr separately is taken
from answer [1] by TheConstructor [3] to question [2].

[1] http://stackoverflow.com/a/18086548
[2] http://stackoverflow.com/questions/11027679/bash-store-stdout-and-stderr-in-different-variables
[3] http://stackoverflow.com/users/1266906/theconstructor
This commit is contained in:
Andrey Mazo 2014-05-20 23:55:59 -04:00
parent 37735a7065
commit 72c49b88e3

View File

@ -55,6 +55,38 @@ run() {
[ -z "$T" ] || set -T
}
# code for storing stdout and stderr separately
# is taken from http://stackoverflow.com/a/18086548
# (question http://stackoverflow.com/questions/11027679/bash-store-stdout-and-stderr-in-different-variables)
run_outerr() {
local e E T
[[ ! "$-" =~ e ]] || e=1
[[ ! "$-" =~ E ]] || E=1
[[ ! "$-" =~ T ]] || T=1
set +e
set +E
set +T
local tmp_out tmp_err tmp_status
eval "$(
"$@" \
2> >(tmp_err="$(cat)" ; declare -p tmp_err) \
1> >(tmp_out="$(cat)" ; declare -p tmp_out)
tmp_status="$?"
declare -p tmp_status
)"
output="${tmp_out}"
error="${tmp_err}"
status="${tmp_status}"
IFS=$'\n' lines_out=($output)
IFS=$'\n' lines_err=($error)
[ -z "$e" ] || set -e
[ -z "$E" ] || set -E
[ -z "$T" ] || set -T
}
setup() {
true
}