如何使用linux shell重定向

Tags: linux shell

我是一个新的Ubuntu Linux和bash shell用户。我知道可以使用以下语法重定向屏幕输出到一个文件中:

cmd > file
ls > file

然而,有时候错误信息不会在屏幕上显示,那么我应该如何在Linux或Unix-like操作系统上重定向输出并保存在文件中呢?

Bash/ksh以及其他流行的Linux Shell都有3个文件描述符:

  1. stdin(0)

  2. stdout(1)

  3. stderr(2)

重定向所有输出到文件中

下面的语法将重定向所有输出stdout:

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

重定向所有错误

下面的语法将重定向所有错误:

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

重定向所有输出和错误到不同的文件

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

重定向所有输出和错误到同一个文件

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

重定向所有错误(stderr)到null或zero设备

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

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

command1 |& tee log.txt
## or ##
command1 -arg |& tee log.txt
## or ##
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

本文链接:http://www.4byte.cn/learning/1822/ru-he-shi-yong-linux-shell-zhong-ding-xiang.html