zoukankan      html  css  js  c++  java
  • shell之重定向

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

    实例:

    [root@localhost ~]# echo 123456 > a.txt
    [root@localhost ~]# cat a.txt
    123456
    [root@localhost ~]# echo 78910 >> a.txt
    [root@localhost ~]# cat a.txt
    123456
    78910
    [root@localhost ~]# echo 2468 > a.txt
    [root@localhost ~]# cat a.txt
    2468
    

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

    比如下面的例子:

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

      

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

    #!/bin/bash
    #test.sh
    
    ls
    catt /
    

      执行脚本test.sh

    ubuntu@ubuntu:~$ 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
    ubuntu@ubuntu:~$ cat a.txt
    a.txt    Documents  examples.desktop  Pictures  Templates  Videos
    Desktop  Downloads  Music             Public    test.sh
    ubuntu@ubuntu:~$ bash test.sh &>a.txt
    ubuntu@ubuntu:~$ 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)中的管道中。

    ubuntu@ubuntu:~$ bash test.sh 1>a.txt 2>&1 a.txt  #覆盖
    ubuntu@ubuntu:~$ 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
    ubuntu@ubuntu:~$ bash test.sh 1>a.txt 2>&1 a.txt  #覆盖
    ubuntu@ubuntu:~$ 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
    ubuntu@ubuntu:~$ bash test.sh 1>>a.txt 2>&1 a.txt    #追加方式
    ubuntu@ubuntu:~$ 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
    ubuntu@ubuntu:~$ 
    

      

  • 相关阅读:
    Python-24-Django(Model Form、Ajax、上传文件、KindEditor)
    P23-Django-model、Form补充 & 序列化
    P22-Django-Session、CSRF、Form、信号
    21-Python-Django进阶补充篇
    Python-Django进阶
    Python-18-Django 基础篇
    17-前端开发之jQuery
    15-前端开发之JavaScript
    14-前端开发之CSS
    14-前端开发之HTML
  • 原文地址:https://www.cnblogs.com/-beyond/p/8215533.html
Copyright © 2011-2022 走看看