三条流,一枚状态
选择命令情景和重定向方式,再运行模拟。观察 stdout、stderr 与退出状态为什么可以同时给出不同信息。
命令情景
成功:只产生普通结果
路径不存在:只产生诊断
混合:结果、诊断与状态 7
Shell 找不到命令
stdout(1)去向
终端
result.txt
管道下游
stderr(2)去向
终端
error.log
合并到 stdout 当前去向
bash -c "printf '普通结果\n'; printf '诊断信息\n' >&2; exit 7" >result.txt 2>error.log
运行模拟
重置选择
命令进程
0
stdin:终端输入
1
stdout:正常数据
2
stderr:诊断数据
stdout → result.txt
stderr → error.log
状态 → 父 Shell
可观察结果
result.txt
尚未运行
error.log
尚未运行
管道下游接收
尚未运行
父 Shell 收到的退出状态
—
调整去向并运行。注意:状态不会被重定向到文件,它由父 Shell 单独收集。
stdin 0
stdout 1
stderr 2
退出状态