zoukankan      html  css  js  c++  java
  • linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <

    重定向命令其实用得不少吧,只是重来都没有仔细看过,这波正好又用到 又有空总结一波。

    先看>和>>:

    他们俩其实唯一的区别就是>是重定向到一个文件,>>是追加内容到文件。两个命令都是如果文件不存在则创建文件。举个例子来看看:

    (thrift_rpc)piperck➜  Desktop  ᐅ  ll >> 123.txt
    (thrift_rpc)piperck➜  Desktop  ᐅ  ll | grep 123.txt
    -rw-r--r--   1 piperck  staff   2.8K Dec 25 00:24 123.txt

    可以看到可以将ll的输出 重定向到123.txt中, >也是同样的效果。只是如果使用>执行重定向的位置没有这个文件

    (thrift_rpc)piperck➜  Desktop  ᐅ  ls > /poweqpikp/123
    zsh: no such file or directory: /poweqpikp/123
    (thrift_rpc)piperck➜  Desktop  ᐅ  ls >> /poweqpikp/123
    zsh: no such file or directory: /poweqpikp/123
    (thrift_rpc)piperck➜  Desktop  ᐅ  ls > 123
    (thrift_rpc)piperck➜  Desktop  ᐅ  ls >> 1234

    但是如果你重定向的是没有的文件夹里面的文件,那么文件夹他是不会帮你创建的,所以会报出错误,这点要注意。

    然后是 1>、 2>、 1>>、 2>>的使用,

    当我们需要把一个文件正确的输出,和错误的输出分开保存的时候就能用到他们啦。让我用一个简单的python脚本来做一个实验

    python脚本如下

    # coding: utf-8
    
    
    if __name__ == '__main__':
        print 'gogogog'
        int('qiowjeioqwjeo')

    该脚本会正确执打印gogogog 然后 报出下面强转的错误。

    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> right.txt 2> wrong.txt
    (thrift_rpc)piperck➜  py_pra  ᐅ  ls
    NS8A_client       gevent            pp.py             starcraft2
    baidu_phoneassist laplace_pra       right.txt         wrong.txt
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat right.txt
    gogogog
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat wrong.txt
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

    可以看到,正确的输出被保存进了right.txt 而错误的输出被重定向到了wrong.txt 。

    那么如果我们不区分1>2>这样的重定向规则,运行结果会被保存成什么样子呢?

    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py > pp.txt
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat pp.txt
    gogogog

    可以看到只保存了正确的结果,错误的信息被打印到标准输出上面。

    那如果我们想让错误和正确的结果都被重定向到同一个文件又应该怎么做呢。

    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1> ppp.txt 2>&1
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat ppp.txt
    gogogog
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

    可以看到,我们将错误也重定向到和1相同的文件 就实现了这个需求。

    同理1>> 2>>其实也就是追加数据到文件中,和前面介绍的> >>没有什么不同,需要提到的一点是,如果我们想将错误的和正确的信息重定向追加到同一个文件应该怎么做呢?你可能会想到2>>&1。。。然而现实是,并没有这个语法。

    然而我们却可以使用1>>pp.txt 2>&1的语法实现这个功能

    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>> pp.txt 2>&1
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat pp.txt
    gogogog
    gogogog
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
    gogogog
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

    可见看似1> 1>> 2> 2>>是相一一对应的,但是其实不是,他们可以混用,比方说正确的结果想追加,错误的结果我想覆盖。

    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>wrong.txt
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat right.txt
    gogogog
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat wrong.txt
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'
    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>wrong.txt
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat right.txt
    gogogog
    gogogog
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat wrong.txt
    Traceback (most recent call last):
      File "pp.py", line 6, in <module>
        int('qiowjeioqwjeo')
    ValueError: invalid literal for int() with base 10: 'qiowjeioqwjeo'

    类似这种组合混用的情况,相对来说也不少见。也可以看出重定向标识的灵活性。

    那么如果我们想保存正确的结果,错误的结果直接丢向垃圾站,既不保存为文件,也不在标准输出打印又该怎么做呢?

    (thrift_rpc)piperck➜  py_pra  ᐅ  python pp.py 1>>right.txt 2>/dev/null
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat right.txt
    gogogog
    gogogog
    gogogog

    直接将错误输出重定向到/dev/null 就好了,他就像一个无底洞,丢进去的东西就不见了。

    那么<又是什么意思呢?<可以将原本由标准输入改为由指定地方输入举个例子就明白了:

    (thrift_rpc)piperck➜  py_pra  ᐅ  vi hh
    (thrift_rpc)piperck➜  py_pra  ᐅ  >> txt.py < hh
    (thrift_rpc)piperck➜  py_pra  ᐅ  cat txt.py
    qwejqwoijeoq

    灵活使用重定向标识符 将极大方便我们日常对系统的操作,和灵活控制脚本的运作,所以一定要掌握哟!

    Reference:

    http://blog.chinaunix.net/uid-298599-id-2443108.html   Linux - 命令重定向

  • 相关阅读:
    待思考问题---数据库的分层模型
    iOS的常用类库
    java spring是元编程框架---使用的机制是注解+配置
    Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java
    Spring注解的使用和组件扫描
    Spring Boot实战:拦截器与过滤器
    问题、存在与认知---问题产生的原因是对存在的不完全或错误认知
    元编程的分层模型
    元编程的本质---高级语言的表达通过解释生成低级语言的表达(代码)
    aop分层模型——aop是元编程的一种
  • 原文地址:https://www.cnblogs.com/piperck/p/6219330.html
Copyright © 2011-2022 走看看