1.5 文件描述符和重定向

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 3,190评论 3 49
  • 1.标准输入和输出  程序:指令+数据 读入数据:Input 输出数据:Ou...
    尛尛大尹阅读 490评论 0 1
  • 本文笔记源自这里——[实验楼]欢迎大家在下面交流其中有问题的地方喜欢请点收藏,每日更新(全部已亲自实践). 一. ...
    东皇Amrzs阅读 4,055评论 7 54
  • 一般的硬件设备,为了保证卖出去后能够适应使用时候的场景,会做高低温测试。比如一般的室内家用设备,电饭煲,显示器,摄...
    豪哥的世界阅读 191评论 0 0
  • “同步是件奢侈的事情”,然而理解这句话也是件奢侈的事情,用了一年多时间,经历了很多不愉快,才大致略有体会。 这是一...
    生半前的我阅读 253评论 0 3