文件描述符是和文件输入与输出关联的整数。它们跟踪打开的文件。最熟知的文件描述符就是 stdin、stdout以及stderr。我们甚至可以将某个文件描述符的内容重定向到另一个描述符。
在编写脚本时,常常要用到stdin、stdout 以及 stderr。通过过滤内容将一个输出重定向到一个文件是我们需要执行的一个基本事务。
文件描述符就是和一个打开的文件或数据流相关联的整数值。
0: stdin (standard input)
1: stdout (standard output)
2: stderr (standard error)
将输出文件重定向或保存到一个文件中:
$ echo "This is a sample text 1" > temp.txt 在写入之前,内容将被清空。
附加内容:
$ echo "This is sample text 2" >> temp.txt
【成功和失败命令:当一个命令出错了,它会返回一个 非0 退出码,而0代表正常完成执行。可以从特殊的变量 $? 来读取该状态值。紧接在命令执行语句的后面运行 echo $? 就可以打印退出状态】
下面的命令将 stderr 文本打印到屏幕上,而不是输出到文件中。并且因为没有 stdout 输出,所以 out.txt 是空的:
$ ls + > out.txt
下面的命令将 stderr 重定向到 out.txt 中:
$ ls + 2> out.txt
你可以重定向 stderr 到一个文件中,重定向 stdout 到另一个文件中,如:
$ cmd 2>stderr.txt 1>stdout.txt
也能够将 stderr与stdout 都重定向到同一个文件中去,就是通过将 stderr 转成 stdout,例如:
$ cmd 2>&1 out.txt
或者
$ cmd &> out.txt
有时候,输出可能包含一些不必要的信息(例如调试信息)。如果你不想输出终端背负stderr详细信息,你应当重定向 stderr 输出到 /dev/null,这会完全移除这些信息。$ cmd 2>/dev/null。
重定向数据到一个文件后,再将该数据的一个副本传给后续的命令。就是通过 tee 命令。下面的代码中,stdin 数据是通过 tee 命令来接收的。它将stdout的一个副本写入到out.txt中,并发送另一个副本作为stdin给下一个命令。cat -n 命令会在从 stdin 接收到的每一行前面加一个行号,并将其写入到 stdout:
$ cat a* | tee out.txt | cat -n
。。。。。。。。。。。。。。。。。。未完