小编典典

如何将标准误差存储在变量中

all

假设我有一个如下脚本:

没用的.sh

echo "This Is Error" 1>&2
echo "This Is Output"

我还有另一个 shell 脚本:

也无用.sh

./useless.sh | sed 's/Output/Useless/'

我想将 “This Is Error” 或 useless.sh 中的任何其他标准错误捕获到一个变量中。我们称之为错误。

请注意,我正在使用标准输出。我想继续使用标准输出,所以在这种情况下将标准错误重定向到标准输出是没有帮助的。

所以,基本上,我想做

./useless.sh 2> $ERROR | ...

但这显然行不通。

我也知道我能做到

./useless.sh 2> /tmp/Error
ERROR=`cat /tmp/Error`

但这是丑陋和不必要的。

不幸的是,如果这里没有答案,那就是我必须要做的。

我希望有另一种方法。

有人有更好的想法吗?


阅读 131

收藏
2022-06-13

共1个答案

小编典典

因此捕获错误文件会更整洁:

ERROR=$(</tmp/Error)

shell 可以识别这一点,并且不必运行 ‘ cat‘ 来获取数据。

更大的问题很难。我不认为有一个简单的方法可以做到这一点。您必须将整个管道构建到子 shell
中,最终将其最终标准输出发送到文件,以便您可以将错误重定向到标准输出。

ERROR=$( { ./useless.sh | sed s/Output/Useless/ > outfile; } 2>&1 )

请注意,分号是必需的(在经典的 shell - Bourne、Korn - 当然;也可能在 Bash 中)。’ {}‘ 对封闭的命令进行 I/O
重定向。如所写,它也会从中捕获错误sed

警告: 正式未经测试的代码 - 使用风险自负。

2022-06-13