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

    重定向应该是Linux下最常用的操作了,之前只是知道怎么用,但原理了解不详细,在此总结一下。

    重定向的例子[1]:ls -l > hold.txt    //将输出重定向到hold.txt

                        ls -l >> hold.txt    //将输出附加到hold.txt尾部

    标准错误重定向[2]

    文件描述符 :是程序发送输出和获取输入的地方(句柄)。

    程序默认会打开三个描述符: 0 标准输入;1 标准输出;2 标准错误。

    command >hold.txt  2>&1 &

    command >hold.txt 是将command的输出重定向到hold.txt文件,即输出内容不打印到屏幕上,而是输出到hold.txt文件中,重定向符号 “>” 默认是1(标准输出),因此使用 “>” 替代 “1>” 。 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了hold.txt文件,即将标准出错也输出到hold.txt文件中。最后一个& , 是让该命令在后台执行。

    试想2>1代表什么?

    2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出。

    为何2>&1要写在后面?

    首先是command > hold.txt 将标准输出重定向到hold.txt中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到hold.txt中,最终结果就是标准输出和错误都被重定向到hold.txt中。如果命令是:command 2>&1 >hold.txt   那么,2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>hold.txt 后输出才被重定向到hold.txt,但标准错误仍然保持在终端,就hold不住了。

    合并标准输出和标准错误 [3]

    符号“&>”把标准出和标准错误重定向到同一个文件。符号“>&”在tcsh中实现相同的功能。

    例子:

    touch aa bb

    echo 'This is bb' >bb

    cat bb cc &>aa

    cat bb dd >&aa //测试发现在bash下,这句也是可以的

    附:查看shell类型

    1, echo $0    系统默认的shell,并不一定是当前的shell

    2, echo $SHELL   同1

    3, ps    查看正在运行的shell

    参考文献:

    [1]Linux程序设计[M].Neil Matthew & Richard Stones

    [2]http://www.linuxde.net/2011/11/1959.html

    [3]Linux命令,编辑器于shell编程[M].Mark G. Sobell

  • 相关阅读:
    O(logn)的乘方算法
    求递归算法时间复杂度:递归树
    Xcode6 创建静态库
    Intellij IDEA使用总结
    使用Entity Framework迁移完数据库后,每次修改代码(非模型代码)后都报错。
    Entity Framework Code First数据库自动更新
    Java中 堆 栈,常量池等概念解析(转载)
    使用MyEclipse9.0开发Web Service
    (转) Java源码阅读的真实体会
    Hibernate注解版设计学生、课程、成绩的关系映射
  • 原文地址:https://www.cnblogs.com/realwall/p/2277849.html
Copyright © 2011-2022 走看看