加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在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,变成一个变量。
让我们称之为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的错误。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读