美文网首页
1.5 文件描述符和重定向

1.5 文件描述符和重定向

作者: ChiangCMBA | 来源:发表于2017-10-20 17:55 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:1.5 文件描述符和重定向

          本文链接:https://www.haomeiwen.com/subject/caivuxtx.html