• linux 重定向命令详解(如1>/dev/null 2>&1)


    基础

    0:表示标准输入stdin
    1:表示标准输出stdout,系统默认为1,可省略(即1>/dev/null等价于>/dev/null)
    2:表示标准错误stderr
    
    >:表示重定向(即将输出定向到指定路径文件,>/dev/null表示将标准输出重定向到空设备文件,即不输出任何信息到终端,即不显示任何信息。)
    2>&1:其中的&表示等同于的意思,即2(标准错误stderr)的重定向等同于1
    

    cmd 1>a 2>a 和cmd 1>a 2>&1的区别

    • cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由此导致stdout和stderr互相覆盖。

    • cmd >a 2>&1 :stdout直接送往文件a ,stderr是继承了FD(File Descriptor)1的管道之后,再被送往文件a 。a文件只被打开一遍,就是FD1将其打开。

      个人感觉有点C++中指针的意思(换汤不换药)

    两者的不同点在于:

    • cmd >a 2>a 相当于使用了FD1、FD2两个互相竞争使用文件 a 的管道;

    • cmd >a 2>&1 只使用了一个管道FD1,但已经包括了stdout和stderr。

      从IO效率上来讲,cmd >a 2>&1的效率更高。

    2&>1实际用途(即错误的输出被合并)

    • 清理系统邮件日志(比如crontab处理)

      cmd >/dev/null 2&>1
      其中0表示键盘输入1表示屏幕输出2表示错误输出,把标准出错重定向到标准输出,然后扔到/dev/null(代表空设备文件)下面去。
      
    • 将标准错误stderr与stdout一同显示出来

      ./test.sh > test2.log 2>&1
      
  • 相关阅读:
    函数调用时函数栈状态分析
    [Project Euler] Problem 51
    [Project Euler] Problem 52
    [Project Euler] Problem 49
    自己的路
    COBOL FILE STATUS(return code)
    SVN客户端使用手册
    堆栈在VBA中的实现
    一个月以来的实习总结
    OpenCVPython系列之图像腐蚀与膨胀
  • 原文地址:https://www.cnblogs.com/wujingqiao/p/9622323.html
Copyright © 2020-2023  润新知