比较 ./a.out > outfile 2> &1 和 ./a.out 2> &1 > outfile 的区别,回答这个问题只要把笔记“shell脚本->输入输出重定向”中提到的输出重定向的本质给搞清楚就可以了,下面解析这个问题。
先分析 ./a.out > outfile 2> &1 ,shell命令是从左向右执行的,首先是将标准输出重定向到文件outfile中,再是将标准错误重定向到标准输出,从文件描述符层面来看首先是代表标准输出的文件描述符 1 指向了文件outfile的文件表项,而代表标准错误的文件描述符 2 指向了文件描述符 1 指向的文件表项,也就是说 文件描述符 1 和 2 都指向了outfile的文件表项。
分析 ./a.out 2> &1 > outfile ,首先标准错误重定向到标准输出,接着标准输出重定向到文件outfile,从文件描述符层面上来看首先代表标准错误的文件描述符 2 指向了文件描述符 1 指向的文件表项(此刻是显示器的设备文件),接着代表标准输出的文件描述符 1 指向了outfile文件的文件表项,所以文件描述符 1 和 2指向的是不同的文件表项,1 指向的是outfile文件表项,而文件描述 2 指向的是显示器的设备文件。
时间: 2024-11-06 21:43:29