zoukankan      html  css  js  c++  java
  • Linux 文件描述符和重定向

    介绍

    文件描述符是与文件输入、输出相关联的整数,在编写脚本时会经常使用标准的文件描述符来将内容重定向输出,0、1、2是文件描述符(分别对应stdin、stdout、stderr),< 、>, >>叫做操作符。

    概念

    stdin(0):标准输入,这个概念有点不太容易理解比如:1.使用<从文件中读取内容,2.当前命令将内容通过管道传输给下一个命令而下一个命令,而实际内容是传输给了stdin所以下一个命令也是从stdin中读取内容。

    stdout(1):标准输出;这是默认选项。使用方法:1>等价于>  或者 1>>等价于>>,;如果想使用其它文件描述符,必须将文件描述符放在操作符之前。

    stderr(2):标准错误,使用方法2>或者2>>,标准错误可以将错误信息插入到文件而不在终端显示  。

    <:从文件中读取内容。

    >:将内容插入到文件,每次插入前都会清空文件内容。

    >>:将内容插入到文件, 将内容追加到现有文件的末尾。

     

    实例

     生成测试数据

    echo "hello word" > test1
    
    cp test1 test2
    
    chmod 000 test2

    stdin(0)

    1.从文本中读取内容

    cat <test1

    2.将读取到的内容通过管道传输给下一个命令

    cat test1 |tr -t 'a-z' 'A-Z' >test1.new

    stdin(1) 

    将内容重定向到文件

    echo "this is stdout 1" >std1

    追加内容到文件

     

    stderr(2)

    遇到报错的时候终端会显示错误,可以将将错误信息写入文件不让终端显示

    同时将stderr和stdout信息都插入到文件,使用&

     

    将错误信息定向标准输出

    echo "name" 2>&1 >> a
    或者
    echo "name" >> a 2>&1

    重定向脚本内部文本块,cat <<EOF>>log.txt EOF

     

    自定义文件描述符

    自定义文件描述符也需要用到exec;< ,>,>>意思和前面解释的一样,当调用自定义的描述符时需要在自定义的描述符前加上&。

    1.自定义stdin,将3定义为stdin从文件中读取内容,然后就可以调用3了,调用3和直接调用文件结果是一样的,有点类似赋值。

    exec 3<test1

    2.自定义stdout,测试结果发现在自定义描述符中使用>往文件中重复写数据并不会清空之前的内容,但是在标准的描述符中是会清空再写入的。

    总结

     文件描述符在脚本中使用的非常频繁,常用的使用方法就是标准输出和标准错误。

    备注:

        作者:pursuer.chen

        博客:http://www.cnblogs.com/chenmh

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

    《欢迎交流讨论》

  • 相关阅读:
    Linux(Ubuntu)安装Mujoco、mujoco-py的详细步骤、安装教程
    Model-Free Episodic Control
    Efficient Off-Policy Meta-Reinforcement Learning via Probabilistic Context Variables
    On First-Order Meta-Learning Algorithms
    Meta-Q-Learning
    Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
    Meta Learning via Learned Loss
    Python不同版本切换
    Ubuntu下压缩解压文件
    Python写入CSV文件的问题
  • 原文地址:https://www.cnblogs.com/chenmh/p/5382044.html
Copyright © 2011-2022 走看看