如何在Bash脚本中的变量中存储标准错误

前端之家收集整理的这篇文章主要介绍了如何在Bash脚本中的变量中存储标准错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个类似下面的脚本:

useless.sh

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

我有另一个shell脚本:

也无用

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

我想捕获“这是错误”,或任何其他stderr从useless.sh,变成一个变量。
让我们称之为ERROR。

注意,我使用stdout的东西。我想继续使用stdout,所以将stderr重定向到stdout是没有帮助的,在这种情况下。

所以,基本上,我想做

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

但这显然不工作。

我也知道我能做到

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

但是这是丑陋和不必要的。

不幸的是,如果没有答案在这里,这是我要做的。

我希望有另一种方式。

任何人有更好的想法?

这将是更容易捕获错误文件,因此:
ERROR=$(</tmp/Error)

shell识别这一点,不必运行“cat”来获取数据。

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

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

注意,分号是需要的(在经典的shell – Bourne,Korn – 肯定的;也许在Bash)。 ‘{}’对所包含的命令进行I / O重定向。如所写的,它将捕获来自sed的错误

(正式未经测试的代码 – 自行承担风险。)

原文链接:https://www.f2er.com/bash/392780.html

猜你在找的Bash相关文章