linux重定向输出

shell 错误输出重定向到标准输出 
./tmp/test.sh > /tmp/test.log 2>&1

>和<是文件重定向符。那么1和2是什么?

shell中每个进程都和三个系统文件相关联
标准输入stdin
标准输出stdout
标准错误stderr
三个系统文件的文件描述符分别为0,1和2。 
所以这里2>&1的意思就是将标准错误也输出到标准输出当中。

下面通过一个例子来展示2>&1有什么作用:

$ cat test.sh
test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout。

标准输出重定向到log文件中,标准错误打印在屏幕上
./test.sh > test1.log
/test.sh: line 1: t: command not found

$ cat test1.log
可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

标准输处和标准错误重定向到同一log文件中
$ ./test.sh > test2.log 2>&1

$ cat test2.log
./test.sh: line 1: t: command not found

这次,stderr和stdout的内容都被重定向到log文件中了。

实际上, >就相当于1>也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了(stderr已作为stdout的副本),那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。

标准输处和标准错误重定向到不同log文件中
如果只想重定向标准错误到文件中,则可以使用2> file。

sh mr_add_test.sh 1>log.log 2>log_err.log

 

输入输出重定向之:'<' and '>'

  '<' and '>'分别用来支持linux中的输入输出重定向,其中'<'支持输入重定向,'>'支持输出重定向。

  1. '<':重定向输入

    sh test.sh < hadoop-hadoop-jobtracker-brix-00.out,将hadoop-hadoop-jobtracker-brix-00.out的内容作为test.sh的输入

      2. '>':将内容全局覆盖式的加入文件,相当于删除该文件并重新建立该文件,再写入的效果

        ls * > test.txt ,将ls * 的所有信息输出到文件test.txt中

  3. '>!':如果存在则覆盖

  4. '>&':执行时屏幕上所产生的任何信息写入指定的文件中

  5. '>>':追加到文件中

  6. '>>&':屏幕上的信息追加到文件中

posted @ 2018-12-04 10:26  車輪の唄  阅读(28)  评论(0编辑  收藏  举报  来源