• 详细理解 > /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的运行参数。 但第一个 > 的后面可带也可不带空格。   第二个 > 的左右均不能带有任何空格。因此比较保险的方法是所有 > 的前后都不带有空格,准没错。

  • 相关阅读:
    mac下的一个类似“_kbhit()”实现
    mac使用备注
    open()打开文件失败对应的各种错误码
    xcode显示行号show gutter
    下载google code中源码的几个工具
    HTML5迷你游戏作验证码
    Linux+eclipse+gdb调试postgresql源码
    S-Nim
    【求助】从大表中删除小表中存在的记录问题
    Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
  • 原文地址:https://www.cnblogs.com/welhzh/p/5688034.html
Copyright © 2020-2023  润新知