如何在Bash脚本中的变量中存储标准错误
发布时间:2020-12-15 16:55:27 所属栏目:安全 来源:网络整理
导读:假设我有一个类似下面的脚本: useless.sh echo "This Is Error" 12echo "This Is Output" 我有另一个shell脚本: 也无用 ./useless.sh | sed 's/Output/Useless/' 我想捕获“这是错误”,或任何其他stderr从useless.sh,变成一个变量。 让我们称之为ERROR。
假设我有一个类似下面的脚本:
useless.sh echo "This Is Error" 1>&2 echo "This Is Output" 我有另一个shell脚本: 也无用 ./useless.sh | sed 's/Output/Useless/' 我想捕获“这是错误”,或任何其他stderr从useless.sh,变成一个变量。 注意,我使用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的错误。 (正式未经测试的代码 – 自行承担风险。) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |