使用>和>>都表示向结果重定向到一个文件中,区别在于>是覆盖式的重定向,会先将内容先清空,然后再将结果输入,而>>是追加式的重定向,是将要输入的内容追加在在已存在的内容后面,并不会清空文件。
实例:
[[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]:~$