shell之重定向

Posted 寻觅beyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell之重定向相关的知识,希望对你有一定的参考价值。

使用>和>>都表示向结果重定向到一个文件中,区别在于>是覆盖式的重定向,会先将内容先清空,然后再将结果输入,而>>是追加式的重定向,是将要输入的内容追加在在已存在的内容后面,并不会清空文件。

实例:

[[email protected] ~]# echo 123456 > a.txt
[[email protected] ~]# cat a.txt
123456
[[email protected] ~]# echo 78910 >> a.txt
[[email protected] ~]# cat a.txt
123456
78910
[[email protected] ~]# echo 2468 > a.txt
[[email protected] ~]# cat a.txt
2468

  重定向符号>之前的数字(0表示标准输入,1表示标准输出,2表示错误输出),如果>之前没有添加数字,则默认为1,表示将 要正常显示的内容重定向到指定文件,如果出现错误,错误信息将显示在屏幕,而不会重定向到文件中,则不会将错误也写入文件中;如果 > 之前写的是2,表示如果出现错误,则将错误信息重定向到文件,而正常的命令的结果内容仍旧正常显示。

比如下面的例子:

[email protected]:~$ echo hello 1> a.txt
[email protected]:~$ cat a.txt
hello
[email protected]:~$ #等价与下面这个语句
[email protected]:~$ echo hello > a.txt
[email protected]:~$ cat a.txt
hello
[email protected]:~$ #当发生错误时,2> 会将错误的信息输出到文件中
[email protected]:~$ #而正常部分的内容仍会正常显示
[email protected]:~$ show 2> a.txt;echo world;
world
[email protected]:~$ #上一条命令中的show出现错误了,但是并没有出现错误信息,因为错误信息重定向到了a.txt中,第二条命令正常运行,所以结果正常显示。
[email protected]:~$ cat a.txt The program ‘show‘ can be found in the following packages: * mailutils-mh * nmh

  单独使用>或者2>,只能将错误或者正确的运行结果重定向到指定文件中,而如果要让正常运行的结果和出现异常时的提示信息都重定向到文件中的话,可以使用&>,注意没有&>>这种语法,即不能追加,但是可以通过其他方法实现。如下例:

#!/bin/bash
#test.sh

ls
catt /

  执行脚本test.sh

[email protected]:~$ bash test.sh
a.txt	 Documents  examples.desktop  Pictures	Templates  Videos
Desktop  Downloads  Music	      Public	test.sh
test.sh: line 5: catt: command not found
[email protected]:~$ cat a.txt
a.txt    Documents  examples.desktop  Pictures  Templates  Videos
Desktop  Downloads  Music             Public    test.sh
[email protected]:~$ bash test.sh &>a.txt
[email protected]:~$ cat a.txt
a.txt    Documents  examples.desktop  Pictures  Templates  Videos
Desktop  Downloads  Music  Public    test.sh
test.sh: line 5: catt: command not found

  尝试将输出(包含正确命令的输出和错误命令的提示信息)以追加方式重定向到一个文件中,重点在2>&1 表示将错误输出(2)也重定向到标准输出(1)中的管道中。

[email protected]:~$ bash test.sh 1>a.txt 2>&1 a.txt  #覆盖
[email protected]:~$ cat a.txt
a.txt    Desktop Documents    Downloads    examples.desktop
Music    Pictures    Public    Templates    test.sh    Videos
test.sh: line 5: catt: command not found
[email protected]:~$ bash test.sh 1>a.txt 2>&1 a.txt  #覆盖
[email protected]:~$ cat a.txt
a.txt    Desktop Documents    Downloads    examples.desktop
Music    Pictures    Public    Templates    test.sh    Videos
test.sh: line 5: catt: command not found
[email protected]:~$ bash test.sh 1>>a.txt 2>&1 a.txt    #追加方式
[email protected]:~$ cat a.txt
a.txt    Desktop Documents    Downloads    examples.desktop
Music    Pictures    Public    Templates    test.sh    Videos
test.sh: line 5: catt: command not found
a.txt    Desktop Documents    Downloads    examples.desktop
Music    Pictures    Public    Templates    test.sh    Videos
test.sh: line 5: catt: command not found
[email protected]:~$ 

  


以上是关于shell之重定向的主要内容,如果未能解决你的问题,请参考以下文章

shell编程之重定向

Flask路由之重定向

SpringBoot系列教程web篇之重定向

#yyds干货盘点#Linux之重定向

Django之重定向

angular---路由之重定向路由