一些不知道的“重定向”

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 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

 

以上是关于一些不知道的“重定向”的主要内容,如果未能解决你的问题,请参考以下文章

Jsp获取Java的重定向赋值(String)

Word 文档的优秀代码片段工具或插件?

302 登录重定向后被 IE 删除的 URL 片段

链接中的 URL 片段和 JSF 中的 ajax 重定向

登录后反应重定向

使用片段 (#) 重定向链接 - asp.net