1.文件描述符是与文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见的文件描述符是stdin、stdout、stderr。我们可以将某个文件描述符的内容重定向到另一个文件描述符中。
文件描述符0、1以及2是系统预留的。
0 ——— stdin (标准输入)
1 ——— stdout (标准输出)
2 ——— stderr (标准错误)
2.将输出文本重定向或保存到一个文件中
(1).以下方法通过截取文件的方式,将输出文本存储到文件temp.txt中,即在把echo命令的输出写入文件之前,temp.txt中的内容首先会被清空。
$ echo “This is a sample text 1” > temp.txt
(2).以下方法会将文本追加到目标文件中。
$ echo “This is a sample text 2” >> temp.txt
>和>>并不相同。尽管这两个操作符都可以将文本重定向到文件,但是前者会先清空文件,再写入内容;而后者会将内容追加到现有文件的尾部。
当使用重定向操作符时,重定向的内容不会出现在终端,而是直接被导入文件。重定向操作符默认使用标准输出。如果想使用特定的文件描述符,则必须将描述符置于操作符之前。
>等同于1>;>>等同于1>>。
(3).可以将stderr单独重定向到一个文件,将stdout重定向到另一个文件:
$ cmd 2>err.txt 1>out.txt
还可以利用下面的方法将stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件中:
$ cmd 2>&1 out.txt
或者使用下列方法:
$ cmd &> out.txt
(4).用tee命令实现:一方面将数据重定向到文件,另一方面可以提供一份重定向数据的副本作为后续命令的stdin。
command | tee FILE1 FILE2
$ cat a* | tee out.txt | cat -n
代码说明:tee命令接收到来自stdin的数据。它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin。命令cat -n将从stdin中接收到的每一行数据加上行号并写入stdout。tee命令只能从stdin中进行读取。
默认情况下,tee命令会将文件覆盖,但它提供了一个-a选项,可以用于追加内容。
#!/bin/bash
#<redirect.sh>
echo "This is a sample text 1" > out.txt
echo "This is a sample text 2" >> out.txt
cmd 2>err.txt 1>out.txt
cmd 2>&1 out.txt
cat out.txt
cmd &> out.txt
cat out.txt
echo "tee命令" | tee err.txt out.txt