• BASH-数据流重导向


    数据流重导向:即将本应在标准输入输出(std input / output / error output)的数据传到别的地方去。

    例如将调试信息存入文档中,而非直接输出到屏幕上。也可以用 tee 命令,即输出到标准输出,又写入指定文档:也叫双向导向。

    传送字符如下所示:

    1.标准输入(stdin):代码为0,使用 < 或 <<

    2.标准输出(stdout):代码为1,使用 > 或 >>   ; 或者 1> 或 1>>,系统预设为1,所以只写>或>>系统默认为标准(正确)输出。

    3.标准错误输出(stderr):代码为2,使用 2> 或 2>>

    >:以覆盖的方式将(正确的数据)输出到指定的文档或装置上。文档原先的数据被本次数据覆盖

    >>:以累加的方式将(正确的数据)输出到指定的文档或装置上。文档原先数据保留,本次数据接在原先数据之后。

    举例:

    1.标准输出重导向

    [root@www ~]# ll / <==此时屏幕会显示出文件名信息

    [root@www ~]# ll / > ~/rootfile <==屏幕幵无任何信息,信息输入到rootfile里面去了,

    <==若该档案不存在就创建之,否则系统先将该档案中数据清空,再写入新数据,也即覆盖。

    2.若将正确和错误的信息分别写入不同的文档

    将 stdout 与 stderr 分别存入不同的档案去

    [dmtsai@www ~]$ find /home -name .bashrc > list_right 2> list_error <==list_right 中存放正确输出的信息: (1)>;list_error中存放错误输出的信息: 2>

    3.将指令的数据全部写入名为 list 的档案中

    [dmtsai@www ~]$ find /home -name .bashrc > list 2> list <==错误
    [dmtsai@www ~]$ find /home -name .bashrc > list 2>&1<==正确
    [dmtsai@www ~]$ find /home -name .bashrc &> list<==正确

    这其中设计到输出顺序问题。


    4.standard input:< 与 << :将原本需要有键盘输入的数据,该有档案的内容来代替。

    范例六:利用 cat 指令来建立一个档案的简单流程

    [root@www ~]# cat > catfile
    testing
    cat file test
    <==这里按下 [ctrl]+d 来离开
    [root@www ~]# cat catfile
    testing
    cat file test
    由于加入 > 在 cat 后,所以那个 catfile 会被主动的建立,而内容就是刚刚键盘上面输入的那两行数据
    了。 唔!那我能利用纯文本文件取代键盘的输入,也就是说,用某个档案的内容来取代键盘的敲击
    呢? 可以的!如下所示:
    范例七:用 stdin 取代键盘的输入以建立新档案的简单流程
    [root@www ~]# cat > catfile < ~/.bashrc
    [root@www ~]# ll catfile ~/.bashrc
    -rw-r--r-- 1 root root 194 Sep 26 13:36 /root/.bashrc


    << 与 < 的区别:

    < : 的结束标识符是EOF,标准文档结束符。

    << : 可以自己指定输入结束的标志,如下所示:

    [root@www ~]# cat > catfile << "eof"
    > This is a test.
    > OK now stop
    > eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d


    数据流重导向应用的场合:

     屏幕输出的信息很重要,而且我们需要将他存下来的时候;
     背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
     一些系统的例行命令 (例如写在 /etc/crontab 中的档案) 的执行结果,希望他可以存下来时;
     一些执行命令的可能已知错诨讯息时,想以『 2> /dev/null 』将他丢掉时;
     错误讯息不正确讯息需要分别输出时。






    参考《鸟哥》


  • 相关阅读:
    思考问题的方式
    领域模型驱动设计读书笔记
    Oracle树形表和递归查询
    java中List , Set , Array相互转换
    JAVA两个数组间元素的比较(找出相同或者不同元素)
    java中的过滤器写法
    打印功能--调整表头
    @WebFilter注解
    深入理解JVM-内存模型(jmm)和GC
    vue生命周期函数
  • 原文地址:https://www.cnblogs.com/cnsec/p/3789799.html
Copyright © 2020-2023  润新知