[Shell基础]执⾏脚本并输出⽇志⽂件
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
dateshell脚本返回执行结果
test.sh中包含两个命令,其中t是⼀个不存在的命令,执⾏会报错,默认情况下,错误会输出到stderr。date则能正确执⾏,并且输出时间信息,默认输出到stdout。
标准输出重定向到log⽂件中,标准错误打印在屏幕上
./test.sh > test1.log
/test.sh: line 1: t: command not found
$ cat test1.log
Tue Oct 9 20:51:50 CST 2007
可以看到,date的执⾏结果被重定向到log⽂件中了,⽽t⽆法执⾏的错误则只打印在屏幕上。
标准输处和标准错误重定向到同⼀log⽂件中
$ ./test.sh > test2.log 2>&1
$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007
这次,stderr和stdout的内容都被重定向到log⽂件中了。
实际上, >就相当于1>也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了(stderr已作为stdout的副本),那么再使⽤>重定向就会将标准输出和标准错误信息⼀同重定向了。
标准输处和标准错误重定向到不同log⽂件中
如果只想重定向标准错误到⽂件中,则可以使⽤2> file。
sh mr_add_test.sh 1>log.log 2>log_err.log
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论