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

    重定向

    熟悉几个特殊符号:

    < :输入重定向
    > :输出重定向
    >> :输出重定向,进行追加,不会覆盖之前内容
    << :标准输入来自命令行的一对分隔号的中间内容.
    

    示例:

     1.cat >file 记录的是键盘输入,相当于从键盘创建文件,并且只能创建新文件,不能编辑已有文件.>是数据重导向,会将你输入的文本内容输出到file中.
    
     cat >file <
    
     两条命令结合起来使用,既记录了键盘输入内容,同时又规定了结束符号之内的内容的范围
     xargs -n 1 < qqq
    
    
    
     <<EOF就是告诉shell脚本现在开始执行命令,当遇到EOF的时候结束命令。
    
     !跟命令指上一次的命令
    

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

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

    if __name__ == '__main__':
        print 'gogogog'
        int('qiowjeioqwjeo')
    
    (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>这样的重定向规则,运行结果会被保存成什么样子呢?

    [root@hbl_test houbinglei]# python test.py > log.txt
    Traceback (most recent call last):
      File "test.py", line 4, in <module>
        func()
      File "test.py", line 3, in func
        int("abc")
    ValueError: invalid literal for int() with base 10: 'abc'
    [root@hbl_test houbinglei]# cat log.txt 
    111
    

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

    [root@hbl_test houbinglei]# python test.py 1 > log.txt 2>&1
    [root@hbl_test houbinglei]# cat log.txt 
    111
    Traceback (most recent call last):
      File "test.py", line 4, in <module>
        func()
      File "test.py", line 3, in func
        int("abc")
    ValueError: invalid literal for int() with base 10: 'abc'
    

    如果我们想将错误的和正确的信息重定向追加到同一个文件应该怎么做呢?你可能会想到2>>&1。。。然而现实是,并没有这个语法。

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

    echo "asd" &>> a.txt &>>就是1跟2 都输入到a.txt

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

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

    (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

    My name is 侯冰雷 ~~欢迎转载 ~~欢迎关注 ~~欢迎留言
  • 相关阅读:
    C# 虚方法virtual详解
    悟透javascript中的function
    C#并行编程-Task
    C#编程高并发的几种处理方法
    【CG】CG标准函数库——数学函数
    【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图
    【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图
    【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理
    【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来
    【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射
  • 原文地址:https://www.cnblogs.com/houbinglei/p/9268873.html
Copyright © 2011-2022 走看看