Shell中输出标准及错误日志

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/9bbd917d/

Shell中2>&1输出日志

前言

有时候我们常看到类似这样的脚本调用:

1
./test.sh  > log.txt 2>&1

这里的2>&1是什么意思?该如何理解?

先说结论:

上面的调用表明将./test.sh的输出重定向到log.txt文件中,同时将标准错误也重定向到log.txt文件中。

了解下1和2在Linux中代表什么

名称 代码 操作符
标准输入(stdin) 0 < 或 <<
标准输出(stdout) 1 >, >>, 1> 或 1>>
标准错误输出(stderr) 2 2> 或 2>>

关于2>&1的含义

  • & 是一个描述符,如果1或2前不加&,会被当成一个普通文件

  • 1>&2 意思是把标准输出重定向到标准错误

  • 2>&1 意思是把标准错误输出重定向到标准输出

  • &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中

为什么2>&1要放在后面

先分析如下命令:

1
./test.sh  > log.txt 2>&1
  • 本来1—>屏幕 (1指向屏幕)

  • 执行>log后, 1—>log (1指向log.txt)

  • 执行2>&1后, 2—>1 (2指向1,而1指向log,因此2也指向了log.txt)

再分析下面命令:

1
./test.sh  > log.txt 2>&1
  • 本来1—>屏幕 (1指向屏幕)

  • 执行2>&1后, 2—>1 (2指向1,而1指向屏幕,因此2也指向了屏幕)

  • 执行>log.txt后, 1—>log (1指向log.txt,2还是指向屏幕)

  • 如此不是我们实际要的结果

简单写法

1
./test.sh  &> log.txt

蚂蚁再小也是肉🥩!


Shell中输出标准及错误日志
http://heibanbai.com.cn/posts/9bbd917d/
作者
黑伴白
发布于
2023年3月10日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付