我想大家都用过Linux下的重定向命令”>”,该命令可以将原本打印到屏幕上的内容(包括标准输入和标准错误信息)重定向到指定文件中,屏幕上将不再输出打印信息。如果指定文件已经存在,文件中已存在的内容会被新重定向过来的内容覆盖,倘若不想覆盖,可以用追加重定向命令”>>”,新重定向过来的内容将被追加到已存在的文件中去。但是,如果你想将标准输入内容既显示到屏幕上又保存到文件中去,那就需要使用tee命令了。tee命令将标准输入复制到每个指定的文件,并显示到标准输出(屏幕)上。
常用参数:
- -a:内容追加到给定的文件而非覆盖
- -i:忽略终端信号
应用实例:演示重定向命令”>”、追加重定向命令”>>”和双向重定向命令tee。
- trevor@trevor-PC:~/linux/linux100$ echo "Hello Linux" > 1
- trevor@trevor-PC:~/linux/linux100$ cat 1
- Hello Linux
- trevor@trevor-PC:~/linux/linux100$ echo "Hello World" > 1
- trevor@trevor-PC:~/linux/linux100$ cat 1
- Hello World
- trevor@trevor-PC:~/linux/linux100$ echo "Hello World" > 2
- trevor@trevor-PC:~/linux/linux100$ cat 2
- Hello World
- trevor@trevor-PC:~/linux/linux100$ echo "Hello Linux" >> 2
- trevor@trevor-PC:~/linux/linux100$ cat 2
- Hello World
- Hello Linux
- trevor@trevor-PC:~/linux/linux100$ echo "Hello Linux" | tee 3
- Hello Linux
- trevor@trevor-PC:~/linux/linux100$ cat 3
- Hello Linux
- trevor@trevor-PC:~/linux/linux100$ echo "Hello World" | tee 3
- Hello World
- trevor@trevor-PC:~/linux/linux100$ cat 3
- Hello World
- trevor@trevor-PC:~/linux/linux100$ echo "Hello World" | tee 4
- Hello World
- trevor@trevor-PC:~/linux/linux100$ echo "Hello Linux" | tee -a 4
- Hello Linux
- trevor@trevor-PC:~/linux/linux100$ cat 4
- Hello World
- Hello Linux
- trevor@trevor-PC:~/linux/linux100$
Linux中0、1和2分别表示标准输入、标准输出和标准错误信息,这三个文件描述符之间可以现实重定向,比如将错误信息重定向到标准输出可以用“2>&1”来实现。值得注意的是,tee命令只捕捉标准输入的信息,标准错误信息无法捕捉。为了既捕获标准输入又捕捉标准错误信息,我们之需要把标准输入和标准错误信息都重定向到标准输出即可。
- cmd 2>&1 | tee logfile
所以如果cmd命令或可执行程序中有标准错误输出,错误信息也能重定向到logfile文件中去。