码迷,mamicode.com
首页 > 其他好文 > 详细

一些不知道的“重定向”

时间:2020-06-23 15:52:04      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:方式   文件中   body   信息   不能   并且   设备   WAD   输出重定向   

如果说输入重定向和输出重定向,比较容易理解。

那我们今天测试一些不常见的情况,发现很多细节,是书上没有的。

 

一、我们直奔主题,看下面的四步。

技术图片

1. 该目录下只有一个文件。

2. 输入cat 命令后,可以在终端输入,不过马上又有输出,最后两行df2 df2 更好说明。按Ctrl+C退出。

3. 可以将上述操作重定向到1.text文件中,发现不会有两行相同的了! 

4.显示上述操作结果,已经写在1.text文件中了。

理论依据: 如果cat后面没有跟文件名的话,那它的作用就是将标准输入(比如键盘)回显到标准输出(比如屏幕)上。

 

二、 上面的第四步换种方式:

技术图片

理论依据:command filename    以filename文件作为标准输入;

command 0filename 同上;(但是command 0 filename0和<符号中间出现空格就会出错,如下面截图)

我们使用<对输入做重定向,如果符号左边没有写值,那么默认就是0

技术图片

 

三、测试 << 符号,在输出重定向>>中是累加文件结尾处。那输入呢?

技术图片

 当我们输入完cat >out <<123,然后敲下回车之后,命令并没有结束,此时cat命令像一开始一样,等待你给它输入数据。然后当我们敲入123之后,cat命令就结束了。123之前输入的字符都已经被写入到了out文件中。这就是输入分割符的作用。

理论依据:command <<delimiter   从标准输入中读入,直到遇到delimiter分隔符。

如果重复这个步骤,因为已经有了分隔符,直接回车就可以退出!如果你再输入其他的,反而提示错误。

 技术图片

 文件里面有分隔符123,但是不能显示出来!

 

四、再来测试输出重定向。一些特别的情况。

技术图片

1.显示不存在的文件

2. 将标准错误输出到err文件中,错误提示不再输出屏幕

3.查看err文件内容,为错误提示

4.将ls命令的标准输出重定向到12test文件中,标准错误重定向到err文件中。 这句是这里的核心,两个重定向!

所以就没有任何提示了。正确的和错误的都有重定向,所以看5.6步。

 

五、解析“>/dev/null 2>&1

这是我们很常见的语句,开源库特别是脚本里面。

1. >/dev/null

这条命令的作用是将标准输出1重定向到/dev/null。 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。

2. 2>&1

这条命令用到了重定向绑定,采用&可以将两个标准文件绑定在一起。这条命令的作用是标准错误将和标准输出同用一个文件描述符,就是标准错误2重定向到标准输出1

linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后标准错误由于重用了标准输出的描述符,所以标准错误也被定向到了/dev/null中,标准错误同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中

 

六、解析“2>&1 >/dev/null

1. 2>&1

将标准错误绑定到标准输出上。由于此时的标准输出是默认值,也就是输出到屏幕,所以标准错误会输出到屏幕
2. >/dev/null

标准输出1重定向到/dev/null中。

我们用一个表格来更好地说明这两条命令的区别:

 

命令标准输出错误输出
>/dev/null 2>&1 丢弃 丢弃
2>&1 >/dev/null 丢弃 屏幕

 

 

 

参考:

https://blog.csdn.net/wade1010/article/details/79415640

 

一些不知道的“重定向”

标签:方式   文件中   body   信息   不能   并且   设备   WAD   输出重定向   

原文地址:https://www.cnblogs.com/orange-CC/p/13181086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!