在很多定时任务里、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. 51NOD1050 循环数组最大字段和

    N个整数组成的循环序列a11,a22,a33,…,ann,求该序列如aii+ai+1i+1+…+ajj的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑an−1n−1,ann,a11, ...

  2. c++程序—switch分支

    #include<iostream> using namespace std; #include<string> int main() { //多元分支 cout <&l ...

  3. 每天一点点之laravel框架开发 - Laravel5.6去除URL中的index.php

    在项目routes/web.php文件中添加了自定义的路由后,访问localhost/index.php/aaa,可以正常访问,但是去掉index.php后,提示404 Not Found 1. 按照 ...

  4. # vim ~/.vimrc vim配色

    Ubuntu # vim ~/.vimrc        # /hom/zzx 下 set nomodeline                "(这个一定要写,目前有这个安全漏洞) set ...

  5. Resource interpreted as Stylesheet but transferred with MIME || DevTools failed to parse SourceMap:

    最近在学SpringBoot,在整合Thymeleaf的时候,配置拦截器.教学上讲SpringBoot已经做好了静态资源映射,所以不需要特地去做排除拦截 以下代码就是我在做登录拦截的时候配置的拦截. ...

  6. 实验吧Web-难-貌似有点难(http头欺骗)

    有关一些http头,参考:https://blog.csdn.net/zz_Caleb/article/details/84147066 打开链接:点击view source看到一段代码 <?p ...

  7. 【转】pip升级不成功怎么办

    python -m pip install --upgrade pip -i https://pypi.douban.com/simple

  8. h5-全屏插件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. centos6-7 yum安装php的方法

    1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 yum remove php.x86_64 php-cli.x86_64 ph ...

  10. JAVA初学者——Hello,World!

    大家好,我是浩宇大熊猫 我本科专业学的是GIS(Geographical Information System),大学期间也学习了很多的编程语言,有C/C++/JAVA等 之前给我们授课的是韩冰老师, ...