gpt4 book ai didi

linux ->> 在不同变量/数组中存储/捕获标准输出和标准错误 (bash)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:00 24 4
gpt4 key购买 nike

想法是将 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

最佳答案

The idea was to forward STDOUT and STDERR to a variable/array, to create the possibility to log it in a file

为什么要重新发明轮子?输出到文件比输出到变量简单得多。

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 .

关于linux ->> 在不同变量/数组中存储/捕获标准输出和标准错误 (bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com