假设我有一个类似下面的脚本:
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`
但是这是丑陋和不必要的。
不幸的是,如果没有答案在这里,这是我要做的。
我希望有另一种方式。
任何人有更好的想法?
这将是更容易捕获错误文件,因此:
原文链接:https://www.f2er.com/bash/392780.htmlERROR=$(</tmp/Error)
shell识别这一点,不必运行“cat”来获取数据。
更大的问题是困难。我不认为有一个简单的方法来做到这一点。您必须将整个管道构建到子shell中,最终将其最终标准输出发送到文件,以便您可以将错误重定向到标准输出。
ERROR=$( { ./useless.sh | sed s/Output/Useless/ > outfile; } 2>&1 )
注意,分号是需要的(在经典的shell – Bourne,Korn – 肯定的;也许在Bash)。 ‘{}’对所包含的命令进行I / O重定向。如所写的,它将捕获来自sed的错误。
(正式未经测试的代码 – 自行承担风险。)