Linux重定向错误输出到文件

时间:2020-01-09 10:41:52  来源:igfitidea点击:

我是Ubuntu Linux和bash shell的新用户。
我也知道如何使用以下语法将输出从显示/屏幕重定向到文件:

cmd>文件ls>文件

但是,屏幕上会显示一些时间错误。如何在Linux或者类似Unix的系统上将输出从计算机屏幕存储和重定向到文件? Linux上的Bash/ksh等现代shell具有三个文件描述符:

  • stdin(0)
  • stdout(1)
  • stderr(2)

语法将所有输出重定向到文件

语法如下,以如下方式重定向输出(stdout):

command-name >  output.txt
command-name >  stdout.txt

语法将所有错误重定向到文件

语法如下,用于重定向错误(stderr),如下所示:

command-name 2> errors.txt
command-name 2> stderr.txt

将输出(stdout)和错误(stderr)都重定向到不同文件的语法

语法:

command1 > out.txt 2> err.txt
command2 -f -z -y > out.txt 2> err.txt

将输出(stdout)和错误(stderr)都重定向到同一文件的语法

语法为:

command1 > everything.txt 2>&1
command1 -arg > everything.txt 2>&1

将错误(stderr)重定向到null或者零设备的语法

写入空或者零特殊文件的数据将被系统丢弃。
这对于消除错误(也称为错误垃圾邮件)很有用:

command1 2> /dev/null
command1 2> /dev/zero
command2 -arg 2> /dev/null
command2 -arg 2> /dev/zero

提示:使用tee命令可同时重定向到文件和屏幕

语法为:

command1 |& tee log.txt
## 或者
command1 -arg |& tee log.txt
## 或者
command1 2>&1 | tee log.txt

另一用法:

#!/bin/bash
# My script to do blah ...
foo(){
:
} 2>&1 | tee foo.log

或者

#!/bin/bash
# My script to do blah ...
{
   command1
   command2
} 2>&1 | tee script.log