Linux 下 2>&1 和 1>&2 的区别

近日在网上看题时遇到这么一条题目:

下面两条命令分别会有怎样的输出
 echo hello 1>&2 | grep aaa
 echo hello 2>&1 | grep aaa
  A、两个均输出hello
  B、第一个无输出,第二个输出 hello
  C、第一个输出hello,第二个无输出
  D、两个均输出hello

正确答案是 C


这题的考点包括 文件描述符重定向管道符 以及 grep

  • 文件描述符
    题中的 1 和 2 就是 LInux 系统中的 文件描述符
    常见的有 0、1 和 2
    0 表示 stdin , 标准输入
    1 表示 stdout , 标准输出
    2 表示 strerr , 标准错误输出
  • 重定向
    > 表示 输出重定向, 本来输出至屏幕等输出设备的信息可以重新指定其输出目标
    比如 who > users 会将 who 命令的输出到当前目录下的 users 文件中

    < 表示 输入重定向, 本来由键盘接收的输入可以指定文件作为输入源
    比如 wc -l < users 表示将 users 中的内容当做标准输入传递给 wc 命令

    综上
    1>&2 表示 将标准输出重定向至标准错误输出
    同理, 2>&1 表示 将标准错误输出
    管道符( | ) 负责传递左边命令的 stdout右边命令的 stdin

echo hello 1>&2 最终输出信息类型为 stderr , 管道符不会对其进行传递, grep aaa 没有找到对应字符串, 无输出
最终输出 为 左边命令的 stderr , 即 hello
echo hello 2>&1 最终输出信息则为 stdout , 管道符对其传递, grep aaa 没有找到对应字符串, 无输出
最终输出 没有任何信息

关于 文件操作符 的进阶操作可以阅读
Shell exec命令操作文件描述符

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值