linux bash的重定向

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的标准输出和标准错误重定向是这种写法。

猜你喜欢

转载自www.cnblogs.com/pluse/p/9234344.html