Bash 中重定向、管道与双向输出的执行语义是什么?
简答题困难462 次浏览
参考答案与解析
# 核心结论
Bash 中的重定向、管道和双向输出都建立在文件描述符之上。标准输入、标准输出和标准错误通常分别对应文件描述符 0、1 和 2。重定向改变命令启动时某个描述符所指向的对象;管道把上游命令的标准输出连接到下游命令的标准输入;tee 从标准输入读取数据,一份写入指定文件,另一份继续写到标准输出。理解“连接在命令主体执行前建立”以及“多个重定向按从左到右处理”,是判断复杂命令输出位置的关键。
# 底层机制
创建管道时,外壳向内核申请读写端点,再为管道两侧建立进程或执行环境,通过复制文件描述符让写端成为上游的标准输出,让读端成为下游的标准输入,并关闭不需要的端点。管道使用容量有限的内核缓冲区,
