cnblogs原创
下面几种bash重定向各表示什么意思?
1 find / -name passwd > /dev/null 2 find / -name passwd > /dev/null 2>&1 3 find / -name passwd 2> /dev/null 4 find / -name passwd &> /dev/null 5 find / -name passwd >& /dev/null
上面有5种重定向,分别表示:
1. 将find结果重定向到 /dev/null,这个find结果指的是标准输出,不含标准错误,比如以非root用户身份运行这个命令时,可能会遇到这样问题,如下:
其中有的是查找到了,有的报错,对应正常查找到的是标准输出,而报错则是标准错误。标准输出与标准错误都是向屏幕输出,区别是有无缓冲,标准错误是不带缓冲的。
这个最终结果是仅输出find错误结果。
2. 将find结果(标准输出)重定向到 /dev/null,同时将标准错误重定向到标准输出。在Linux中,内核默认为每个进程打开3个描述符(标准错误2、标准输出1、标准输入0)。
这个最终结果是什么都不输出。
3. 将find结果(标准错误)重定向到 /dev/null,不含标准输出。
这个最终结果是只输出正常结果,不输出错误结果。
4/5. 这两个是相同的,只是不同写法,>&和&>完全相同,它们对位置先后无要求。将find结果(标准输出)重定向到 /dev/null,同时将标准错误重定向到标准输出。>&或者&>等同于> /dev/null 2>&1。为什么会有这种写法?大概原因是bash对csh进行兼容导致的,因为csh的标准输出和标准错误重定向是这种写法。