我们的想法是将STDOUT和STDERR转发到变量/数组,以创建将其记录在文件中的可能性。 特别是应记录STDERR。
向TheConstructor求助,我找到了一个解决方案,我认为它应该适用于每种情况......
< Store / Capture stdout and stderr in different variables (bash)>
我的bash不支持:
readarray
typeset: t_err
我的bash版本:
bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
我的想法:
function CMD() {
unset t_std t_err
eval "$( ($1 ; $1 >&2) 2> >(readarray -t t_err; typeset -p t_err) > >(readarray -t t_std; typeset -p t_std) )"
}
CMD "cp x.txt new_x.txt"
CMD "nocommand new_x.txt"
这些是bash给出的错误:
./test_files.sh: line 61: readarray: command not found
./test_files.sh: line 61: typeset: t_err: not found
答案 0 :(得分:0)
我的想法是将STDOUT和STDERR转发到变量/数组,转换为 创建将其记录在文件中的可能性
为什么重新发明轮子?输出到文件比变量简单得多。
cp x.txt new_x.txt 1> out.txt 2> err.txt
如果你想在变量中存储stdout和stderr,并且你有Bash版本3,你是否尝试过第二个解决方案by @Constructor:
unset t_std t_err
# REPLACE "echo std; echo err >&2" with your real command
eval "$( (echo std; echo err >&2 ) 2> >(t_err=$(cat); typeset -p t_err) > >(t_std=$(cat); typeset -p t_std) )"
另请参阅further topic development in the answer of @BinaryZebra。