Shell 输入/输出的重定向含义(>、>>、2>、2>>、&>、&>>、1>&2、2>&1)

225 阅读1分钟

一、简介

  • 这里以 ls 命令进行举例。

    $ ls
    

    image.png

  • 总结:

    一个 > 的是每次覆盖导出结果,两个 > 的是在文件尾部追加导出结果。

    >:导出成功结果,不支持导出失败结果。

    2>:导出失败结果,不支持导出成功结果。

    $>:支持导出上面两种结果,混合导出。

  • 如何区分是否导出成功?

    在屏幕上输出了就是导出失败,没有输出则导出成功。

    image.png

二、详细案例

  • >:将命令运行 成功 结果导出到指定文件,只能导出 成功 的结果,失败/错误 的结果无法导出。

    $ ls > ls.txt
    

    image.png

    image.png

    测试失败结果:ls.txt 里面是空的,导入失败。

    image.png


  • >>:将命令运行 成功 结果导出 追加 到指定文件尾部,只能导出 成功 的结果,失败/错误 的结果无法导出。

    image.png

    image.png

  • 2>:将命令运行 失败/错误 结果导出到指定文件,只能导出 失败/错误 的信息,成功 的结果无法导出。

    image.png

    image.png

    测试成功结果:ls.txt 里面是空的,导入失败。

    image.png


  • 2>>:将命令运行 失败/错误 结果导出 追加 到指定文件尾部,只能导出 失败/错误 的信息,成功 的结果无法导出,截图案例就不贴了。


  • &>:将命令运行 成功/失败/错误 结果导出到指定文件,支持任何状态的结果导出。

    image.png

    image.png

三、进阶用法

  • 组合使用,成功的导出到 ls.txt,失败的导出到 ls2.txt

    $ ls ls.txt dzm.txt > ls.txt 2> ls2.txt
    
  • 组合使用,成功的导出到 ls.txt,失败的导出到 ls.txt

    • 1> 通常可以省略成 >,有了这些认识才能理解 1>&22>&1

    • 1>&2 正确返回值传递给 2 输出通道 &2 表示 2 输出通道,如果此处错写成 1>2, 就表示把 1 输出重定向到文件 2中。

    • 2>&1 错误返回值传递给 1 输出通道,同样 &1 表示 1 输出通道。

    $ ls ls.txt dzm.txt > ls.txt 2>&1