在很多定时任务里、shell里我们往往能看到 "2>&1",却不知道这背后的原理。

举个例子:

* 1 * * * test.sh > /dev/null 2>&1

这里的”2>&1“的意思是把标准错误重定向到标准输出。

0:代表标准输入 1:代表标准输出 2:代表标准错误

上面的例子"2>&1"已经知道是将标准错误重定向到标准输出,而test.sh的标准输出就是/dev/null,所以这条语句的结果(标准输出、标准错误)都会打到/dev/null。 用c来表示可以更加清楚细节:

int fd = open("/dev/null", "w+");
dup2(fd, 1); # 将标准输出重定向至/dev/null
dup2(1, 2); # 将标准错误重定向至标准输出

我们调换一下/dev/null和2>&1的位置:

* 1 * * * test.sh 2>&1 > /dev/null

这里表示先将标准错误重定向至标准输出,再将标准输出重定向至/dev/null。这样的结果就是还能看见标准错误 用c来表示下细节:

int fd = open("/dev/null", "w+");
dup2(1, 2); # 将标准错误重定向至标准输出
dup2(fd, 1); # 将标准输出重定向至/dev/null

可能看了上面的例子还是一脸懵圈,我举几个例子:

# 假设table不存在

ls table 2>&1
# 报错,并在标准输出(终端)展示 ls table > /dev/null 2>&1
# 报错,标准错误重定向到标准输出。而标准输出被/dev/null给占据了,所以错误进了/dev/null ls table 2>&1 > /dev/null
# 报错,标准输出指向/dev/null。而标准错误任然重定向至标准输出,所以能在终端看到错误输出
来源:http://www.1994july.club/?cat=386

Linux中的错误重定向你真的懂吗的更多相关文章

  1. Linux中的数据重定向

    重定向即指:将数据传送输出到别的地方,如设备.文件等等.那就涉及到将什么数据传送到什么地方的问题. 在linux中命令执行的起源和结果说起,看下图: Standard input和Standard e ...

  2. linux中输入输出和重定向问题

    输入输出解释 当我们执行shell的时候,每个进程都和三个打开的文件有关系,并使用文件描述符来引用这些文件.但这些文件不容易记忆,所以shell给了相应的文件名: 0:输入文件-标准输入(它的命令是输 ...

  3. Linux中的输出重定向

    标准输入输出: 键盘        /dev/stdin        0       标准输入 显示器    /dev/stdout      1       标准输出 显示器    /dev/st ...

  4. Linux中的输入重定向,变量

    1 :分号 格式:命令1:命令2;命令3 说明:命令之间用分号隔开是顺序执行,命令之间没有任何逻辑关系 2  &&  逻辑与 格式:命令1 && 命令2 说明:命令1正 ...

  5. 在linux中获取错误返回信息 &…

    #include // void perror(const char *msg); #include // char *strerror(int errnum); #include //errno e ...

  6. linux中链接错误的时候,快速找到缺失的符号在哪个库中

    编译一个opencv程序,链接的时候出现大量的如下错误: /home/admin/opencv/opencv-master/modules/imgproc/src/color_lab.cpp:23: ...

  7. linux中nginx重定向方法总结

    linux中nginx 301重定向跳转方法总结 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 复制代码代码如下: server { server_naaaaaaame www.aa ...

  8. linux中的输入从定向和输出重定向

    linux的标准的输入和输出为如下 我们在 linux中执行命令时,命令默认输出到console中,很多时候我们需要将命令输出到其他设备上如最常见的就文件中去,或者重文件中输入.那这时候就需要用到li ...

  9. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

随机推荐

  1. vzray服务端配置

    打开securecrt登陆服务器 输入命令:bash <(curl -s -L https://git.io/vzray.sh)1 回车tcp 回车端口 回车默认 回车

  2. 【LeetCode】160. 相交链表

    题目 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB ...

  3. UVA - 1615 Highway(高速公路)(贪心+区间选点)

    题意:给定平面上n(n<=105)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过D. 分析: 1.根据D可以算出每个点在x轴上的可选区 ...

  4. jQuery实现点击div外的区域,来隐藏指定节点

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...

  5. 使用GDI+显示OpenCV中的图像IplImage

    OpenCV虽然自带了轻量级的界面库HighGUI,但是支持的图像化元素实在是太少了,一般只在前期算法测试时使用.实际产品还是使用MFC库.因此本文记录了如何在GDI+中显示OpenCV中的IplIm ...

  6. CSS - 自学笔记

    2018-12-14 ----- 1 所有元素的锚点默认就是它的物理中心 2 改变锚点位置的方法: transform-origin: x-axis y-axis z-axis; 3 ps里在层级里选 ...

  7. JAVAEE 和项目开发(第三课:HTTP的请求头和请求方式)

    HTTP 协议之请求格式   请求格式的结构:请求行:请求方式.请求的地址和 HTTP 协议版本 请求头:消息报头,一般用来说明客户端要使用的一些附加信息 空行: 位于请求行和请求数据之间,空行是必须 ...

  8. java: 集合collection

    collection是集合层次结构中的根接口,一些集合允许重复元素,而其他集合不允许. 有些collection是有序的,而另一些是无序的. JDK不提供此接口的任何直接实现:它提供了更具体的子接口的 ...

  9. 标准JAVA工程结构

  10. MySQL表连接原理

    以下文章均来自掘金小测: https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c061b0cf265da612577e0f4 表连接本质: ...