输入输出重定向、2>&1、标准输入、标准输出、标准错误
https://zhuanlan.zhihu.com/p/47765176
./test.sh > log.txt 2>&1
每个程序在运行后,都会至少打开三个文件描述符,分别是
0:标准输入;
1:标准输出;
2:标准错误。
2>&1表明将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出),为什么1前面需要&?当没有&时,1会被认为是一个普通的文件,有&表示重定向的目标不是一个文件,而是一个文件描述符。在前面我们知道,test.sh >log.txt又将文件描述符1的内容重定向到了文件log.txt,那么最终标准错误也会重定向到log.txt。
文件描述符fd:
ps -ef|grep test.sh #重新打开命令串口,使用ps命令找到test.sh的pid
hyb 5270 4514 0 19:20 pts/7 00:00:00 /bin/bash ./test.sh
hyb 5315 5282 0 19:20 pts/11 00:00:00 grep --color=auto test.sh
可以看到test.sh的pid为5270,进入到相关fd目录 /proc/5270/fd:
cd /proc/5270/fd #进程5270所有打开的文件描述符信息都在此
ls -l #列出目录下的内容
0 -> /dev/pts/7
1 -> /dev/pts/7
2 -> /dev/pts/7
255 -> /home/hyb/workspaces/shell/test.sh
### 要注意顺序,不要写成这样:
./test.sh 2>&1 >log.txt