zoukankan      html  css  js  c++  java
  • 详细理解 > /dev/null 2>&1

    0:表示键盘输入(stdin)
    1:表示标准输出(stdout),系统默认是1
    2:表示错误输出(stderr)


    "command >/dev/null 2>&1 &"  与 "command 1>/dev/null 2>&1 &"  的意思一样


    1) command:    表示shell命令或者为一个可执行程序
    2) >:       表示重定向到哪里
    3) /dev/null:  表示Linux的空设备文件
    4) 2:      表示标准错误输出
    5) &1:     &表示等同于的意思,  2>&1表示2的输出重定向于1
    6) &:    表示后台执行,即这条指令执行在后台运行

    1 >/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
    2>&1:表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设
    件。


    这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.
    所以可以看出" > /dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。

    重定向,例如 echo "Hello" > /root/1.txt

    • command > file 2>file
    • command > file 2>&1

    相同点:上面两个命令都可是实现将执行command后的,标准及错误输出重定向到file文件中。

    不同点: I/O效率上的差异
    command 1>file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file的管道。
    command 1>file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。从I/O 效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,最多的时候我们会command 1>file 2>&1 这样的写法, 或 "command >file 2&1"

    注意:

    你要是写成这样:command >/dev/null 2>&1 &, 则第一个 > 的前面可以带有空格;但是如果你写成这样: command 1>/dev/null 2>&1 &, 则第一个 > 的前面最好不带有空格,不然1会被当成command的运行参数。 但第一个 > 的后面可带也可不带空格。   第二个 > 的左右均不能带有任何空格。因此比较保险的方法是所有 > 的前后都不带有空格,准没错。

  • 相关阅读:
    mysql获取给定时间段内的所有日期列表
    mysql中的年,月,日统计以及日历表的实现
    MySQL5.7安装配置
    获取ip地址
    Intellij热部署插件JRebel
    IntelliJ IDEA2018版热部署jrebel插件安装使用教程
    idea插件篇之java内存分析工具(JProfiler)
    mysql中的整除,取余
    SIMD.mul (SIMD) – JavaScript 中文开发手册
    Java面试题 : 如何确保N个线程访问N个资源的同时又不导致死锁
  • 原文地址:https://www.cnblogs.com/welhzh/p/5688034.html
Copyright © 2011-2022 走看看