• 关于>&2、2>&1等重定向的详细解释!


    1:在POSIX shell中,命令的结果可以通过%>;的形式来定义(其中%表示文件描述符:1为标准输出stdout、2为标准错误stderr)!系统默认% 值是1,也就是1>;,而1>;可以简写为>;,也就是默认为>;。而stdout的默认目标是终端(这点不用验证吧)。另 外,stderr的默认目标也是终端(而且是unbuffered).

    2:其中&的意思,可以看成是“The same as”、“与...一样”的意思。

    3:

    Bourne和Korn shell中的重定向
    从文件输入                                                       <file or 0<file
    将标准输出重定向为文件                                    >;file or 1>;file
    将标准错误重定向为文件                                     2>;file
    将标准输出追加到文件                                        >;>;file
    将标准错误重定向为标准输入                              2>;&amp;1
    将第一个命令的输入作为第二个文件的输入          cmd1|cmd2
    将第一个文件即作为标准输入也作为标准输出       <>;file
    关闭标准输入                                                    0<&amp;-
    关闭标准输出                                                    1>;&amp;-
    关闭标准错误                                                    2>;&amp;-

    4:

    ls my.file no.such.file 1>;file.both 2>;file.both
    从 file system 的角度来说,单一档案在单一时间内,只能被单一的 FD 作写入。
    假如 stdout(1) 与 stderr(2) 都同时在写入 file.both 的话,
    则要看它们在写入时否碰到同时竞争的情形了,基本上是"先抢先赢"的原则。
    让我们用周星驰式的"慢镜头"来看一下 stdout 与 stderr 同时写入 file.out 的情形好了:
    * 第 1, 2, 3 秒为 stdout 写入
    * 第 3, 4, 5 秒为 stderr 写入
    那么,这时候 stderr 的第 3 秒所写的数据就丢失掉了﹗

    要是我们能控制 stderr 必须等 stdout 写完再写,或倒过来,stdout 等 stderr 写完再写,那问题就能解决。
    但从技术上,较难掌控的,尤其是 FD 在作"长期性"的写入时...

    那,如何解决呢?所谓山不转路转、路不转人转嘛,
    我们可以换一个思维:将 stderr 导进 stdout 或将 stdout 导进 sterr ,而不是大家在抢同一份档案,不就行了﹗
    bingo﹗就是这样啦:

    * 2>;&1 就是将 stderr 并进 stdout 作输出
    * 1>;&2 或 >;&2 就是将 stdout 并进 stderr 作输出

    于是,前面的错误操作可以改为:

    $ ls my.file no.such.file 1>;file.both 2>;&1

    $ ls my.file no.such.file 2>;file.both >;&2

    这样,不就皆大欢喜了吗? 呵~~~ ^_^

  • 相关阅读:
    cefsharp webBrowser Javascript 打开winForm界面
    大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)
    Java对象序列化与RMI
    Java与编码问题串讲之二–如何理解java采用Unicode编码
    android中清空一个表---类似truncate table 表名 这样的功能 android sqlite 清空数据库的某个表
    使用Camera功能 AREA的理解
    去掉android的屏幕上的title bar
    Android View的onTouchEvent和OnTouch区别
    关于安卓HTTP请求用HttpUrlConnection还是HttpClient好
    如何确定拍照时,相机屏幕是横屏or竖屏?
  • 原文地址:https://www.cnblogs.com/lingepeiyong/p/2303849.html
Copyright © 2020-2023  润新知