1-6玩转文件描述符和重定向
1.6玩转文件描述符和重定向
文件描述符是与输入和输出流相关联的整数。
1.6.1 预备知识
脚本可以使用大于号将输出重定向到文件中。
文件描述符是与某个打开的文件或数据流相关联的整数。文件描述符0、1以及2是系统预留的。
-
0 —— stdin (标准输入)。
-
1 —— stdout(标准输出)。
-
2 —— stderr(标准错误)。
1.6.2 实战演练
1.使用大于号将文本保存到文件中(覆盖)
echo "This is a example text 1" > temp.txt #如果temp.txt已存在,则清空其中内容 |
2.使用双大于号将文本追加到文件中
echo "This is a example text 2" >> temp.txt |
3.将stderr文本保存到文件中(覆盖)
ls + 2> out.txt #OK,指定了stderr流 |
4.将stderr和stdout分别重定向到不同文件
cmd 2> stderr.txt 1> stdout.txt |
5.将stderr和stdout输出到一个文件
cmd 2>&1 alloutput.txt #OK |
6.不显示、保存stderr
command 2> /dev/null #将命令重定向至空设备中 |
7.保存数据同时作为下一命令输入使用
stdout作为单数据流(single stream),可以被重定向到文件或是通过管道传入其他程序,但是无法两者兼得。
tee命令接收到来自stdin的数据。它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin。
cat命令没有文件参数,会从stdin读取,再输出到stdout
command | tee FILE1 FILE2 | otherCommand |
注意:|
符号表示前一个命令的输出作为下一个命令的标准输入。(即将stdout重定向到stdin)
8.将输入的文字标行号并重定向到两份文件中
tee stdout.txt | cat -n > out.txt #从stdin读入,输入到stdout.txt,同时标号输入out.txt |
1.6.4 补充内容
1.将文件重定向到命令
像读取stdin一样读取文件,使用<
cmd < file |
2.重定向脚本内部的文本块
可以将脚本中的文本重定向到文件。
案例
要想将一条警告信息添加到自动生成的文件顶部,可以使用下面的代码:
!/bin/bash |
结果:
cat log.txt |
3.自定义文件描述符
使用exec命令,后面跟新的文件描述符和文件名
exec 3< input.txt #将input.txt作为3,输入模式 |
发布于