一些不知道的“重定向”
Posted orange-C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些不知道的“重定向”相关的知识,希望对你有一定的参考价值。
如果说输入重定向和输出重定向,比较容易理解。
那我们今天测试一些不常见的情况,发现很多细节,是书上没有的。
一、我们直奔主题,看下面的四步。
1. 该目录下只有一个文件。
2. 输入cat 命令后,可以在终端输入,不过马上又有输出,最后两行df2 df2 更好说明。按Ctrl+C退出。
3. 可以将上述操作重定向到1.text文件中,发现不会有两行相同的了!
4.显示上述操作结果,已经写在1.text文件中了。
理论依据: 如果cat后面没有跟文件名的话,那它的作用就是将标准输入(比如键盘)回显到标准输出(比如屏幕)上。
另,cat的功能之一,从键盘创建一个文件:
$ cat > filename
二、 上面的第四步换种方式:
理论依据:command < filename 以filename文件作为标准输入;
command 0< filename 同上;(但是command 0 < filename 即0和<符号中间出现空格就会出错,如下面截图)
我们使用<对输入做重定向,如果符号左边没有写值,那么默认就是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
以上是关于一些不知道的“重定向”的主要内容,如果未能解决你的问题,请参考以下文章