Linux学习第二十三篇--数据流重导向

来源:互联网 发布:软件行业平均利润率 编辑:程序博客网 时间:2024/05/17 22:23

了解标准输出和标准错误输出

在具体学习数据流重导向之前,需要先了解一下,标准输出和标准错误输出的概念.
下图是一张读取文件内容的过程.

上图中已经给出了标准输出和标准错误输出的定义.其实这个东西很好理解,尤其是如果学过编程的话,这也是入门必然会接触到的一个东西.
在有了这个概念的基础下,我们再去了解数据流重导向.

数据流重导向

标准输出和标准错误输出

其实数据流重导向在之前的blog中我也已经使用过了,比如上一篇blog中生成one.sh和two.sh两个shell文件就用到了数据流重导向的功能.
那么数据流重导向到底是一个怎样的功能呢?
我们用一个小故事理解,在之前的blog中讲过一个贪官张三的故事,这里继续这个故事.
话说,贪官张三知道新来的钦差带着大军来查案,开始慌了,他一个小小的文官,安定时用来欺压欺压百姓还可以,但是想和军队作对,他是万万不敢的,就算敢,他也打不过啊...
这时候,张三身边的谋士告诉张三,既然钦差是来查脏银的,我们何不把脏银藏起来,然后在如此如此,这般这般..到时候,这钦差自然会无功而返.
张三一听大喜,于是,就派人秘密将脏银藏到十里外的一座荒山里,于此同时,起义军的头领正愁发不出粮饷呢,恰好得知这个消息,于是,带军队悄悄埋伏在去往荒山的必经之路上,将脏银劫下,且不说,张三等人失了脏银作何反应,也不提起义军头领得了脏银又是何等得意.
这里根据这个故事来说一下数据流重导向这个概念.
在这里,这批脏银就好比我们读取文件时的数据流,本来这批脏银被打算藏到荒山里,就像当我们使用 ll  /  cat等命令查看文件时,应该将结果输出到屏幕上,但是脏银却被起义军头领劫走了,但是我们将数据流重导向到了其他地方.
PS:上面这句话真乱....
拿一个例子看一下,在写局部变量和全局变量那篇blog中用过这么一个例子.
echo -e '#!/bin/bash\npanda=熊猫\necho $panda\n./one.sh'>two.sh

我们解析一下,按理来说,当我们使用echo命令的时候,将会将数据输出到屏幕上,但是实际上屏幕却没有打印信息,而是生成了一个two.sh文件,该文件的内容就是原本应该打印在屏幕上的信息.这里.,这些信息其实就是被劫持了(数据流重导向).
看上面的例子中,我们使用一个 > 符号将数据重导向到了two.sh文件内.
这里这个符号就是数据流重导向符号,和他类似的还有.
>输出导向,覆盖原本文件中的内容.>>输出导向,在源文件原内容后面追加新的内容.<输入导向<<输入导向,可以指定结束符号.在前文中,提到了标准输出和标准错误输出,还有一个叫做标准输入.
标准输入代码为0,使用<或者<<标准输出代码为1,使用>或者>>标准错误输出代码为2,使用2>或者2>>我们试一下,这个标准输出和标准错误输出.


标准错误输出.
看一下,下面的过程,我们尝试执行a.txt文件,必然会报错的,因为a.txt没有x权限.
然后我们试试用标准输出会发现,错误信息依然显示在了屏幕上,而a.txt文件只能够没有任何数据.
然后我们再使用标准错误输出试试.

如果,我们需要同时将正确信息和错误信息都写入一个文件,我们可以使用
命令 > 文件 2>&1 这种形式或者 命令 &>文件.
将标准错误输出转到标准输出中去,同理,我们也可以使用1>&2 将标准输出转到标准错误输出.

标准输入

标准输出的作用就是将原本需要通过键盘输入的数据,改由通过读取文件输入.
比如.
我们先创建一个文件 echo 'hello panda! ' >say.txt

然后将say,txt的内容重导向到demo,txt文件中.

这篇blog略微有点短啊...


阅读全文
0 0
原创粉丝点击