Linux中的错误重定向你真的懂吗

在很多定时任务里、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

原文地址:https://www.cnblogs.com/1994july/p/12178111.html

时间: 2024-11-07 15:41:49

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

Linux中的数据重定向

重定向即指:将数据传送输出到别的地方,如设备.文件等等.那就涉及到将什么数据传送到什么地方的问题. 在linux中命令执行的起源和结果说起,看下图: Standard input和Standard error都会输出到屏幕上,这样会将屏幕搞的非常混乱,且又是输出内容过多也不易于阅读.甚至有时候的输出内容非常重要需要保存,这是该怎么办?? 答案是:数据重定向,将输出内容导入到别的地方. linux中数据重定向的特殊符号: 标准输入:代码为0,使用<或者<< 标准输出:代码为1,使用1>

Linux中的输出重定向

标准输入输出: 键盘        /dev/stdin        0       标准输入 显示器    /dev/stdout      1       标准输出 显示器    /dev/stderr       2       错误输出 输出重定向 正确输出: 命令 > 文件 以覆盖的形式,把命令的正确输出写入指定文件中 命令 >> 文件 以追加的形式,把命令的正确输出写入指定文件中 错误输出: 命令 2> 文件 以覆盖的形式,把错误信息写入指定文件中 命令 2>&

Linux中I/O重定向

系统设定 默认输出设备:标准输出,STDOUT,1 默认输入设备:标准输入,STDIN,0 标准错误输出:STDERR,2 标准输入 :键盘 标准输出和错误输出:显示器 1.输出重定向 > : 覆盖输出 >> : 追加输出 如果为了防止操作失误可以使用 set -c  开启文件存在不可覆盖功能    set  +c   可以关闭 在开启set -c 时也可以使用 >| 强制覆盖 2.错误输出重定向 2>   覆盖 2>>  追加 3.即定向错误又定向正确 ls /

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

编译一个opencv程序,链接的时候出现大量的如下错误: /home/admin/opencv/opencv-master/modules/imgproc/src/color_lab.cpp:23: undefined reference to `cv::softfloat::softfloat(int)' softfloat是个什么鬼?应该链接哪个库才行? vi /home/admin/opencv/opencv-master/modules/imgproc/src/color_lab.cpp

&lt;实训|第十一天&gt;学习一下linux中的进程,文件查找,文件压缩与IO重定向

[[email protected]~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就讲解一下关于运维工程师例行事务的知识!  开班第十一天: [[email protected]~]#今天的课程大纲 查看进程,中断进程,切换进程 内存与swap分区 linux中文件查找的基本方法 linux中是如何解压缩文件的 关于I/O重定向的知识点 远程scp配合管道 详细讲解: [[e

Linux中重定向、管道和grep命令总结

今天我们来讲下Linux中的重定向.管道和grep命令.由于重定向和管道知识点比较少,但是又比较重要所以和grep命令一起讲. 在将重定向我们先讲下系统的标准输入和输出.在Linux中标准输入(STDIN 0)对应设备:键盘:标准输出(STDOUT 1)和标准错误输出(STDERR 2)对应设备:显示器.重定向就是将标准输入输出重新定位到指定位置或者设备中(比如:文件). I/O重定向 set –C 禁止对已存在的文件进行覆盖重定向 强制覆盖>| set +C 关闭上述功能 输出重定向: >:

linux中重定向学习总结

文件标识符是从0到9结束的整数,指明了与进程有关的特定数据流源.当Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入.标准输出和标准错误输出,分别由文件标识符0.1.2标识,如果进程要打开其他的输入和输出文件,则从3开始标识.另外3-9是保留的标识符,可以把这些标识符指定为标准输入.标准输出和标准错误输出的临时连接.通常这样可以解决好多复杂的重定向请求. 下面举一些由管道符连接的重定向的例子: 1.ls -l | sed -n '1,5p'--

linux中Shell标准输出错误 &gt;/dev/null 2&gt;&amp;1 分析【转】

Shell中可能经常能看到:>/dev/null  2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/null 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo "123" > /home/123.txt    1 表示stdout标准输出,系统默

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

linux的标准的输入和输出为如下 我们在 linux中执行命令时,命令默认输出到console中,很多时候我们需要将命令输出到其他设备上如最常见的就文件中去,或者重文件中输入.那这时候就需要用到linux的输入和输出的重定向了. 常用文件重定向命令: command >file: 标准输出重定向到一个文件,错误仍然输出屏幕 command >>file: 标准输出重定向到一个文件(追加) command 1>file1: 标准输出重定向到一个文件 command 2>>