输入输出重定向

输出重定向

输出重定向,为的是将本应输出的屏幕上的写入到指定文件或设备中去。

其方式为:

命令 > 文件 :以覆盖的方式,把命令的输出写入文件

命令 >> 文件 :以追加的方式,把命令的输出写入文件

前提是,这个命令得有输出才行,比如:cd命令在没有发生错误的情况下是不会产生输出的。

 

首先,让我们来做一个测试,首先我们创建两个空白文件,file_out 和file_err

当我们使用date命令时,屏幕上会输出当前的时间和日期。

现在我们将date命令的输出重定向到file_out 文件中去

执行 date > file_out 后发现屏幕上没有产生date的输出,而打开file_out 文件,我们可以看到其输出被保存在了我们这个指定的文件中。

接着我们用 ls > file.out 命令,接着打开file.out文件,果然ls的输出也被保存在了这个文件中,然而,我们发现原先其中的date命令的输出被覆盖了,原因是单大于号 > 是以覆盖的方式进行写入的,要想以追加的形式写入,只需要用双大于号 >>。

所以,我们这次使用 date >> file_out命令,再观察file_out文件,便不会覆盖了。

以上是当命令正确执行时的输出重定向,接下来我们看一下标准错误的输出,它与保准输出有些差异。

比如,我们使用 lsa 这个不存在的命令,系统就会报错,同时输出错误信息,提示这个命令不存在。接下来我们可以把这个错误信息也写入到指定的文件中去,但是这里注意了,标准错误重定向的操作,不能照猫画虎写成 lsa > file_err ,这样是错误的,其输出仍会显示到屏幕上。

而是应该在大于号前写一个2,如: lsa 2> file_err ,注意:2和>或>>之间不能存在空格

现在查看file_err文件就和我们期望的一样了。

然后,再使用 lsd 2>> file_err,查看file_err文件,也是正常的。

讲到这里,可能就有些人发现了,标准输出和标准错误的输出重定向的命令格式是不一样的,也就是说,我得先要知道我前面的命令是否正确,然后才能用相应的格式进行重定向,这就产生一个问题:我都知道我这条命令时错的,我为什么还要把他写错呢???

不要着急,其实想这种将标准输出与标准错误分开保存的行为在实际操作中并不常用,我们常用的是:能够将标准输出和标准错误同时保存在相应的文件中。

这里有三种形式可供大家选择:

前两种形式其达到的是相同的目的:把标准输出和标准错误输出到同一个文件中去,>和>>的区别也就是覆盖和追加而已。现在我们来进行测试:

datex >> file 2>&1

date >> file 2>&1

观察file文件,发现正确和错误的输出都在里面。

接下来的第二种形式,和上面的命令的作用是一样的,测试一下

datex &>> file

date &>> file

由于以上两种形式的命令产生的结果是一样的,所以大家可以自行选择用的顺手的。

这里有一个小知识, /etc/null是linux中相当于垃圾站的地方,也就是空,当我们不要看到任何输出时,可以把输出结果重定向到这里,linux会将其直接丢弃。那么 命令 &> /etc/null,的意思即是:这条命令执行就好,我不关心它会产生什么输出。(这个知识点会在之后编写shell脚本时用到)

最后的这种形式,是把标准输出和标准错误写入到不同的文件,比如我们有一个命令,如果正确执行,其输出保存在文件true中,如果出错,其错误输出保存在文件false中。下面就行测试:

pwd >> true 2>> false

查看true和false两个文件,只有true文件中有内容,而false中是没有的。

接下来看错误的命令:pwdd >> true 2>> false

查看true和false两个文件,false中有了内容,而true中也没增加新内容。

输入重定向

既然有输出重定向,那么输入重定向也是有的。我们知道输出重定向是将原本要输出到屏幕上的数据转而写入指定文件,而输入重定向,就是将原本需要从键盘获得的信息,改为从文件中获得。

输出重定向的形式为 : 命令 < 文件 

即把文件作为命令的输入,为了有个例子方便理解,这里我们认识一个 wc 命令。

wc是一个统计命令,当没有参数时,它会统计输入的行、单词数(以空格分开)、字符数(包括换行),只有当按下 ctrl D 组合键时,wc才知道你输入结束了,便会输出统计信息。如果使用了任意的选项,那么它就不会输出这三个信息了,而是按照选项输出信息。

那么,来看一下输入重定向会达到怎样的效果。

首先,我们建立一个 a.txt 的文件,其中内容如下:

要统计这个内容的信息,既可以通过 wc 命令用键盘输入这个内容,也可以通过我们所说的输入重定向来达到:
 

我们发现,两种方式所统计出来的结果是一模一样的。即输入重定向可以让我们原本需要通过键盘输入的信息改为从文件中获得。

另外输入重定向也支持 <<,不过这种应用就更少了,它是以两个相同字符串之间的内容作为输入的,即统计这两个相同字符串之间的内容。如当前边是internet ,这时它就不再需要Ctrl D组合键来结束,而是当它再次遇到 internet时开始统计它们之间的内容。如:

我们可以看出,这时 wc 所统计的内容是不包括首尾的 internet 的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值