欢迎各界计算机爱好者加入,弘扬极客精神!

Linux中2>&1是什么意思

9 喜欢 0 不喜欢

我上网查的说是错误重定向到标准输出,具体什么意思啊,是干嘛的啊

最新提问 4月 25, 2014 分类:Linux | 用户: sunshiny (1,222 分)  

3 个回答

5 喜欢 0 不喜欢
 
已采纳
>和>>都是重定向输出
1> 指标准信息输出路径(也就是默认的输出方式)
2> 指错误信息输出路径
2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

比如 $ cat cities > cities.copy 2>&1

代表标准出错,如果文件不存在,如果不加上2>&1则会打印出错信息,

加上以后就不会打印了,也进入那个文件了
&1代表标准输出定向到的地方,这句相当于
cat cities > cities.copy 2> cities.copy
或者
cat cities 1> cities.copy 2> cities.copy
或者
cat cities 2> cities.copy 1> &2

0:标准输入,1:标准输出,2:标准出错

 

最新回答 4月 25, 2014 用户: 畅所欲言 (1,554 分)  
采纳于 6月 16, 2014 用户:sunshiny
2 喜欢 0 不喜欢

 

2>&1你可以这么理解:把标准错误输出重定向>,通过后台&,放到标准输出所在的地方.因为是在后台运行,所以你是看不见出错信息的.因此,&,可以理解成是后台行为.

 

最新回答 4月 26, 2014 用户: 我是一只戴眼镜的老鼠 (5,854 分)  
1 喜欢 1 不喜欢
ls a.txt b.txt 1>file.out 2>file.out
这样写的话你没考虑stdout和stderr的缓冲。
stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕;而stderr是无缓冲的,会直接输出。
重定义到文件后,stdout就变成全缓冲(而不是行缓冲),得等到缓冲区满(一般8192B)才会实际写入;而stderr不管怎么样重定向,都是无缓存,向其输入数据后,马上实际写入。
这样有可能导致file.out文件内容错乱,stdout和stderr内容前后顺序颠倒
最新回答 4月 26, 2014 用户: cleveland (1,380 分)  
...