2>&1是什么意思

问:

为了将 stderr 和 stdout 合并成 stdout 流,我们将它附加到命令中:

2>&1

例如,要查看编译 g++ main.cpp 的前几个错误:

g++ main.cpp 2>&1 | head

2>&1 的具体含义是什么?

答:

文件描述符 1 是标准输出(stdout)。

文件描述符 2 是标准错误(stderr)。

起初,2>1 看起来像是将 stderr 重定向到 stdout 的好方法。但是,它实际上会被解释为“将 stderr 重定向到名称为 1 的文件”。

& 表明其后面和前面的(数字)是文件描述符,而不是文件名。因此,我们使用 2>&1。考虑将 >& 作为重定向合并运算符。

相关知识点:

在操作系统术语中,正在运行的程序被称为进程。Unix/Linux/POSIX(包括 Windows)环境中的每个进程都有三个不同的输入/输出文件描述符,分别是标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。

● stdin 是程序的默认输入源--默认情况下,字符来自键盘。对应文件描述符数字 0。

● stdout 是发送程序输出的默认位置,默认情况下,输出出现在运行 shell 或 shell 脚本的窗口中。

● stderr 标准错误也可以从程序中发送到输出,但它只应该输出到程序中编写错误消息的地方。

 shell 提供了一种机制,你可以让一个正在运行的程序在不修改程序本身的情况下更改它的输入位置和输出位置,这种技术就是重定向。

参考:

  • stackoverflow question 818255
  • 《bash网络安全运维》

PS:

  本文首发于公众号: 程序熵, 更多精彩文章请点击关注 code-shang

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值