zoukankan      html  css  js  c++  java
  • 标准输出和标准错误输出

    相关概念

    默认情况下,总是有三个文件处于打开状态

    1. 标准输入(键盘输入)			对应文件描述符0
    2. 标准输出(输出到屏幕)		对应文件描述符1
    3. 标准错误(也是输出到屏幕)	对应文件描述符2
    

    常用方法

    >/dev/null 2>&1
    
    实际上,应该等同于这样:1 > /dev/null 2 > /dev/null ,默认情况下就是1,标准输出,所以一般都省略。
    而&号,后面接的是必须的文件描述符。
    不能写成2>1,这样就成了标准错误重定向到文件名为1的文件中了,而不是重定向标准错误到标准输出中。
    所以这里就是:标准输出重定向到了/dev/null,而标准错误又重定向到了标准输出,
    所以就成了标准输出和标准错误都重定向到了/dev/null
    
    2>&1 >/dev/null
    事实上, 命令行的重定向什么的, 是在执行命令之前就准备好了的。
    解释顺序从左至右依次进行, 2>&1 ,而1是屏幕, 所以标准错误重定向到屏幕, 
    再而 1>/dev/null , 即标准输出重定向到 /dev/null, 上述2>&1 >/dev/null
    并不是什么同一时刻要么产生标准输出要么产生标准错误. 而是两个不同的东西.
    
    用以下变量的方式做个解释,就很明显了,这两种方式是不同的,前者就像:
    a=1
    b=a
    
    而后者就像:
    b=a
    a=1
    
    &>/dev/null
    # 这个就是,不管你是啥玩意儿文件描述符,通通重定向到/dev/null
    

    整理

    &   一般是表示产生一个子shell,即后台运行
    但在这里的&是一个标志,是个规定,这个符号后面的数字代表一个文件描述符
    &1	这表示标准输出
    &2	标准错误输出
    2>&1	将标准错误重定向到标准输出
    

    实例

    • 实例讲解
      1 #!/bin/bash
      2 
      3 date +%F > 1019
      4 date +% F 2> 1020
    
    date +%F	的标准输出是2017-10-19
    date +% F	的标准输出是空,只有标准错误输出
    	[root@localhost ~]# date +% F
    	date: extra operand `F'
    	Try `date --help' for more information.
    1. 想要将错误输出重定向到文件直接重定向是不行的
    	date +% F > 1020
    2. 若要做的的话需要这样写
    	date +% F 2> 1020
    3. 假设这样写
    	date +% F >&2 1020	#开始我这样写的,但这是错误的
     #因为这个意思是将标准输出重定向到标准输出,
     #而此时的标准输出为空,所以1020文件为空
    
    • 实例中发现的问题
    	[root@localhost ~]# head 1 2
    	==> 1 <==
    	2222
    
    	==> 2 <==
    	1111
    	[root@localhost ~]# awk '{print $0}' 1 2
    	2222
    	1111
    	[root@localhost ~]# awk '{print $0}' 1 2>file
    	2222
    	[root@localhost ~]# awk '{print $0}' 1 2 >file
    #这里就出现了一个有趣的现象,2后面的空格问题
    #当2后面没有空格时,shell就默认2>为一体,识别为标准错误输出
    #因为这里的文件名2与标准错误输出的文件描述符冲突了
    
    #当2后面有空格时,shell就识别2为文件名,作为awk的参数来处理
    

    参考链接六神的CSDN

  • 相关阅读:
    【Vertica】vertica配置ODBC
    【oracle】【demo】oracle批量造数据
    【oracle】oracle系统视图nls_database_parameters
    【oracle】interval函数
    【DB2】DB2帮助文档
    【oracle】【sql】oracle去重
    【oracle】【sql】oracle分组
    【oracle】【性能】case表达式
    oracle EXP-00028
    Nginx系列~Nginx服务启动不了
  • 原文地址:https://www.cnblogs.com/irockcode/p/7692509.html
Copyright © 2011-2022 走看看