Shell 重定向错误输出

Shell 重定向错误输出

笔者准备写一个 Shell 脚本,需要获取一行命令的错误输出,存于一个变量中,供后续使用。

首先是获取输出内容到变量:

IN=`echo hello`

或者:

IN=$(echo hello)

这样将会把标准输出 hello 存在变量 IN 中。

但是上述方法只能获取标准输出(stdin),不能获取标准错误(stderr)。于是需要重定向输出:

IN=`ls /aaa 2>&1`

如果路径 /aaa 不存在,那么上述命令会产生一个标准错误输出,而用 2>&1 则可以把标准错误重定向到标准输出,于是就能存于变量 IN 中。

在 Shell 中,在一条命令末尾加上 > 即可重定向输出。可以重定向到文件(echo hello > /tmp/in)、设备(echo hello > /dev/null)以及输出类别(echo hello >&2)等。

直接用 > 默认重定向标准输出。若要声明被重定向的输出类别,可以用 1> 重定向标准输出,用 2> 重定向标准错误。于是上述代码中 2>&1 就是把标准错误重定向到标准输出,以便被变量获取。

当然,笔者只想保留标准错误,需要筛去标准输出,此时需要同时把原标准输出重定向到 /dev/null/dev/null 相当于一个黑洞,或者说垃圾桶,可以把不需要的东西都重定向到这里去。重定向标准输出到 /dev/null 写作 1>/dev/null

所以最终代码是

IN=`ls /aaa 2>&1 1>/dev/null`

注意,这个重定向的顺序是有影响的。依经验看,上述重定向顺序是正确的。

声明:未经作者允许禁止转载

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RainbowC0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值