美文网首页
shell文件描述符与重定向

shell文件描述符与重定向

作者: 迷鹿milu | 来源:发表于2019-08-18 12:02 被阅读0次

    文件描述符与重定向

    1 文件描述

    linux 中:当一个命令发生错误并回退时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回为0的退出状态。
    退出状态可以从特殊变量?中获得(在命令结束后立即运行echo? 可以打印出退出状态)。

    系统描述符 对应输出 描述
    0 stdin 标准输入
    1 stdout 标准输出
    2 stderr 标准错误

    1.1 文件描述的输出

    1. 错误示范:(输出到屏幕)
    ls + > out.txt
    
    1. 正确示范:(指明输出状态)
    ls + 2> out.txt
    
    1. 重定向输出到两个文件:
    cmd 2>stderr.txt 1>stdoout.txt
    
    1. 同时输出到同一个文件:
    cmd 2>&1 alloutput.txt
    cmd &> output.txt
    

    1.2 实例:

      创建测试文件:

    echo A1 > a1
    echo A2 > a2
    echo A3 > a3
    chmod 000 a1        // 清除 a1 所有权限
    

      使用通配符 a* 查看所有文件:

    cat a* 2> err.txt
    
    cat : a1 permission denied
    A2
    A3
    
    cat err.txt
    cat : a1 permission denied
    

      cat -n 为从 stdin 中接收到的每一行数据前加上行号并将其写入 stdout:

    cat a* | tee out.txt | cat -n 
    cat: a1: Permission denied
    1 A2
    2 A3
    

      要发送输入内容的两份副本给 stdout,使用 - 作为命令的文件名参数即可:

    echo who is this | tee -
    
    who is this
    who is this
    

    2 自定义描述符

    2.1 exec 命令创建全新的文件描述符。

    描述符的常用打开模式有三种:
    只读模式
    追加写入模式
    截断写入模式

      < 操作符可以将文件读入stdin
      > 操作符用于截断模式的文件写入(数据在目标文件内容被截断后写入)
      >> 操作符用于追加模式的文件写入
      > 等同于 1>
      >> 等同于 1>>

    2.2 只读模式

      创建描述符:

    exec 3<input.txt    //使用文件描述符 3 打开并读取文件
    

      使用:

    echo this is a test line > input.txt 
    exec 3<input.txt
    
    cat <&3
    this is a test line
    

    2.3 截断模式

      创建描述符:

    exec 4>output.txt 
    echo newline >&4
    
    cat outpute.txt
    newline
    

    2.4 追加模式

      追加模式:

    exec 5>>input.txt
    echo appended line >&5
    
    cat input.txt
    newline
    appended line
    

    相关文章

      网友评论

          本文标题:shell文件描述符与重定向

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